我有两个位于经纬度网格上的数据数组。第一个 A 的形状为 (89, 180)。第二个 B 的形状为 (94, 192)。 A 的纬度按降序排列,从 88. 到 -88. & 经度按升序从 0. 到 358。B 的纬度按降序从 88.54199982 到 -88.54199982,经度按升序从 0. 到 358.125。
我想将 B 的数据重新网格化/插值到 A 的坐标系上,以便我可以获得两个相同大小的数组并计算它们之间的空间相关性。 (如果更容易的话,我还可以将 A 的数据重新网格/插值到 B 的坐标系上。)我尝试了 mpl_toolkits.basemap.interp(datain, xin, yin, xout, yout),但这需要 xout 和 yout 具有相同的大小。我也尝试过 scipy.interpolate.griddata,但我不知道它是如何工作的,我什至不确定这是否能让我得到我正在寻找的东西......
您可能想看看pyresample
对于这个和其他类似的地理插值问题。它提供了多种插值方法,可以很好地处理纬度/经度数据,并结合了basemap
支持。我推荐这个包,因为你也可以创建AreaDefinition
使用 Proj4 定义定义域的对象,然后将数据注册到AreaDefinition
.
对于您的具体问题,我将执行以下操作(注意,插值步骤不完整,请参见下文):
from pyresample.geometry import SwathDefinition
from pyresample.kd_tree import resample_nearest
def interp_b_to_a(a, b):
'''Take in two dictionaries of arrays and interpolate the second to the first.
The dictionaries must contain the following keys: "data", "lats", "lons"
whose values must be numpy arrays.
'''
def_a = SwathDefinition(lons=a['lons'], lats=a['lats'])
def_b = SwathDefinition(lons=b['lons'], lats=b['lats'])
interp_dat = resample_nearest(def_b, b['data'], def_a, ...)
new_b = {'data':interp_dat,
'lats':copy(a['lats']),
'lons':copy(a['lons'])
}
return new_b
请注意,插值步骤其中resample_nearest
称为不完整。您还需要指定radius_of_influence
这是每个点周围使用的搜索半径(以米为单位)。这取决于数据的分辨率。您可能还想指定nprocs
加快速度并fill_value
如果您使用屏蔽数据。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)