我有一个(大)多维 xarray 数据数组或数据集,并且想沿着一维路径选择或插入数据,而没有缓慢的循环或列表理解(例如,在纬度和经度上定义了二维数据,我想获取数据沿着由纬度和经度给出的路径):
import xarray as xr
import numpy as np
lats, lons = np.arange(0, 6), np.arange(10, 17)
path_lats, path_lons = np.arange(0.3, 5, 0.5), np.arange(10.6, 15.6, 0.5)
da = xr.DataArray(np.random.rand(len(lats), len(lons)), coords=[lats, lons], dims=['latitude', 'longitude'])
Run Code Online (Sandbox Code Playgroud)
下面返回一个包含 path_lats 和 path_lons 的所有组合的 2D DataArray,类似于使用 itertools.product(path_lats, path_lons) 的 for 循环:
da_path = da.interp(latitude=path_lats, longitude=path_lons)
Run Code Online (Sandbox Code Playgroud)
对于大于二维的更大的 Dataarrays\Datasets,这将消耗大量内存,因为它包含大量此任务不需要的数据。
我想要的是使用 zip(path_lats, path_lons) 的 for 循环 \ 列表理解的快速版本,例如(此处无效语法)
da_pathZIP = da.interp((latitude, longitude) = (path_lats, path_lons))
Run Code Online (Sandbox Code Playgroud)
这将返回一个一维数据数组(坐标:路径的索引),可能还有数据附加的纬度和经度。生成的 Dataarray 应包含以下数据:
[float(da.interp(latitude=p_lat, longitude=p_lon)) for p_lat, p_lon in zip(path_lats, path_lons)]
Run Code Online (Sandbox Code Playgroud)
在不使用循环的情况下,这可以在 …