重新网格化 Python xarray 坐标

您可以通过迭代字典中的每个项目来做到这一点,但是在大型数据集中它可能效率低下。


def get_key(data, query):

    for key, value in data.items():

        if query in value[0][1]:

            return key

    return 'Not Found'

get_key(dictonary, word)然后,即使您的查找未能找到匹配项,您也可以调用您的函数并返回结果。


# Note i changed the name of the dictionary to dicton, as dict shouldn't be used as a variable name

print(get_key(dicton, 'three'))

print(get_key(dicton, 'seven'))

print(get_key(dicton, 'four'))


#a

#Not Found

#b我有一些 0.2 度和 1 度分辨率的虚拟数据。我想对 foo 进行二次采样,使其与 foo1 的比例相同。有什么简单的方法可以以某种方式平均和重新排列我的经纬度坐标吗?


import pandas as pd

import xarray as xr

import matplotlib.pyplot as plt


#Set at 0.2 degree grids ish

freq=20

lats=240

lons=1020

time=pd.date_range('2000-01',periods=freq,freq='Y')

data=np.random.rand(freq,lats,lons)

lat=np.linspace(-19.5,19.5,lats)

lon=np.linspace(120,290,lons)

foo = xr.DataArray(data, coords=[time, lat,lon], dims=['time', 'lat','lon'])

foo.sel(time='2005',method='nearest').plot()

plt.show()



#Set at 1 degree grids

freq1=20

lats1=40 #Factor of 6 difference

lons1=170

time1=pd.date_range('2000-01',periods=freq1,freq='Y')

data1=np.random.rand(freq1,lats1,lons1)

lat1=np.linspace(-19.5,19.5,lats1)

lon1=np.linspace(120,290,lons1)

foo1 = xr.DataArray(data1, coords=[time1, lat1,lon1], dims=['time', 'lat','lon'])



foo1.sel(time='2005',method='nearest').plot()

plt.show()


胡子哥哥
浏览 214回答 2
2回答

慕妹3242003

Xarray 可以线性插值纬度和经度,就好像它们是笛卡尔坐标一样(如上面的示例),但这与适当的地理重新网格化不同。为此,您可能想查看xesmf。

慕工程0101907

我决定最简单的方法是使用 foo1 网格进行解释。因此:foo2=foo.interp(lat=lat1).interp(lon=lon1)foo2.sel(time='2005',method='nearest').plot()应生成准确的子采样网格图。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python