[英]xarray select\interpolate custom 1D slice out auf multidimensional data (aka zip vs itertools.product)
我有一个(大型)多维xarray数据数组或数据集,并希望沿1D路径选择或内插数据,而不会降低循环或列表理解的速度(例如,在“纬度和经度”上定义了2D数据,我想获取该数据沿着经度和纬度给出的路径):
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'])
下面的代码返回一个2D DataArray,其中包含path_lats和path_lons的所有组合,类似于使用itertools.product(path_lats,path_lons)的for循环:
da_path = da.interp(latitude=path_lats, longitude=path_lons)
对于二维以上的较大Dataarrays \\ Dataset,这将消耗大量内存,因为它包含了此任务不需要的大量数据。
我想要的是使用zip(path_lats,path_lons)的for loop \\ list comprehension的快速版本,例如(此处无效的语法)
da_pathZIP = da.interp((latitude, longitude) = (path_lats, path_lons))
这将返回一维数据数组(坐标:路径的索引),以及可能会附加到数据的纬度和经度。 生成的Datarray应该包含以下数据:
[float(da.interp(latitude=p_lat, longitude=p_lon)) for p_lat, p_lon in zip(path_lats, path_lons)]
在不使用循环的情况下,在xarray中可能吗?
没关系,我只是在xarray docs中找到了解决方案:
da_lons = xr.DataArray(path_lons, dims='time')
da_lats = xr.DataArray(path_lats, dims='time')
da_pathZIP = da.interp(latitude=da_lats, longitude=da_lons)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.