繁体   English   中英

xarray select \\ interpolate自定义1D切片出auf多维数据(aka zip vs itertools.product)

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM