从一个纬度网格到另一个纬度网格的数据插值?

2024-06-01 11:08:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个数据数组,在经纬网格上。第一个是A,它的形状是(89180)。第二个是B,形状是(94192)。A的纬度从88度开始按降序排列。到-88。&经度从0开始按升序排列(amp;L)。到358。B的纬度从88.54199982到-88.54199982按降序排列,经度从0开始按升序排列。到358.125。在

我想把B的数据重新网格化/插值到A的坐标系中,这样我就可以得到两个相同大小的数组,并计算它们之间的空间相关性。(如果比较容易的话,我也可以将A的数据重新生成/插值到B的坐标系上)_工具箱.basemap.interp(datain,xin,yin,xout,yout),但这需要xout和yout的大小相同。我也试过了scipy.interpolate.griddata,但我不知道它是怎么工作的,我甚至不确定这是否能得到我想要的东西。。。在


Tags: 数据空间数组插值amp形状坐标系网格化
1条回答
网友
1楼 · 发布于 2024-06-01 11:08:25

您可能需要查看pyresample,了解这个和其他类似的地理插值问题。它提供了多种插值方法,可以很好地处理lat/lon数据,并包含basemap支持。我建议使用这个包,因为您还可以创建使用Proj4定义定义域的AreaDefinition对象,然后将数据注册到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。在

相关问题 更多 >