gpt4 book ai didi

python - xarray select\interpolate 自定义一维切片 auf 多维数据(又名 zip 与 itertools.product)

转载 作者:行者123 更新时间:2023-11-30 22:08:33 24 4
gpt4 key购买 nike

我有一个(大型)多维 xarray 数据数组或数据集,并且希望沿着 1D 路径选择或插入数据,而无需缓慢的 for 循环或列表理解(例如,在纬度和经度上定义了 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'])

以下内容返回一个包含 path_lats 和 path_lons 的所有组合的 2D DataArray,类似于使用 itertools.product(path_lats, path_lons) 的 for 循环:

da_path = da.interp(latitude=path_lats, longitude=path_lons)

对于二维以上的较大 Dataarrays\Datasets,这将消耗大量内存,因为它包含此任务不需要的大量数据。

我想要的是使用 zip(path_lats, path_lons) 的 for 循环\列表理解的快速版本,例如类似于(此处语法无效)

da_pathZIP = da.interp((latitude, longitude) = (path_lats, path_lons))

它将返回一个一维数据数组(坐标:路径的索引),并且可能还返回数据的纬度和经度。生成的 Dataarray 应包含以下数据:

[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)

关于python - xarray select\interpolate 自定义一维切片 auf 多维数据(又名 zip 与 itertools.product),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52136388/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com