多个维度上的 xarray 点插值
xarray point interpolation on multiple dimensions
我正在尝试直接使用 xarray 从 3D 数据集(经度、纬度、时间)中插入信息。
当我只用一个点进行简单插值时,我完全没有问题。
lat = [44.25]
lon = [-4.5]
t = datetime.strptime('2000-02-28 01:00:00', '%Y-%m-%d %H:%M:%S')
ds = xr.open_dataset('file.nc')
vx = ds['uo_surface'].interp(longitude=lon, latitude=lat, time=t)
但现在我正在尝试以相同的方式插入几个点,并且遵循相同语法的此操作的结果显示了我预期的更多结果。
lat = [44.25, 45.25]
lon = [-4.5, -5]
t = datetime.strptime('2000-02-28 01:00:00', '%Y-%m-%d %H:%M:%S')
ds = xr.open_dataset('Currents\oceanTESEO.nc')
vx = ds['uo_surface'].interp(longitude=lon, latitude=lat, time=[t, t])
结果是这个数组:
array([[[0.01750018, 0.05349977],
[0.03699994, 0.11299999]],
[[0.01750018, 0.05349977],
[0.03699994, 0.11299999]]])
但是,我希望只有 2 个值,每个 (lon,lat,t) 点一个。
我是否必须实现一个循环才能做到这一点?我想这个功能已经包含在 xarray 中了。
你知道用 4D 数据阵列(经度、纬度、z、时间)更快地计算这种点插值的其他方法吗?
提前致谢!!!
是的,这是可能的。
乍一看有点 "less intuitive",但功能强大并记录在此处:http://xarray.pydata.org/en/stable/interpolation.html#advanced-interpolation
您需要拨打的电话是:
ds['uo_surface'].interp(longitude=('z', lon), latitude=('z', lat),
time=('z', [t, t]))
这实现了 "vectorized" 索引,而在您之前的调用中,您正在执行 "orthogonal" 索引。有关详细信息,请参阅 http://xarray.pydata.org/en/stable/indexing.html#vectorized-indexing
我正在尝试直接使用 xarray 从 3D 数据集(经度、纬度、时间)中插入信息。
当我只用一个点进行简单插值时,我完全没有问题。
lat = [44.25]
lon = [-4.5]
t = datetime.strptime('2000-02-28 01:00:00', '%Y-%m-%d %H:%M:%S')
ds = xr.open_dataset('file.nc')
vx = ds['uo_surface'].interp(longitude=lon, latitude=lat, time=t)
但现在我正在尝试以相同的方式插入几个点,并且遵循相同语法的此操作的结果显示了我预期的更多结果。
lat = [44.25, 45.25]
lon = [-4.5, -5]
t = datetime.strptime('2000-02-28 01:00:00', '%Y-%m-%d %H:%M:%S')
ds = xr.open_dataset('Currents\oceanTESEO.nc')
vx = ds['uo_surface'].interp(longitude=lon, latitude=lat, time=[t, t])
结果是这个数组:
array([[[0.01750018, 0.05349977],
[0.03699994, 0.11299999]],
[[0.01750018, 0.05349977],
[0.03699994, 0.11299999]]])
但是,我希望只有 2 个值,每个 (lon,lat,t) 点一个。 我是否必须实现一个循环才能做到这一点?我想这个功能已经包含在 xarray 中了。 你知道用 4D 数据阵列(经度、纬度、z、时间)更快地计算这种点插值的其他方法吗?
提前致谢!!!
是的,这是可能的。
乍一看有点 "less intuitive",但功能强大并记录在此处:http://xarray.pydata.org/en/stable/interpolation.html#advanced-interpolation
您需要拨打的电话是:
ds['uo_surface'].interp(longitude=('z', lon), latitude=('z', lat),
time=('z', [t, t]))
这实现了 "vectorized" 索引,而在您之前的调用中,您正在执行 "orthogonal" 索引。有关详细信息,请参阅 http://xarray.pydata.org/en/stable/indexing.html#vectorized-indexing