为 N 个点插入一个 xarray DataArray 并获取使用 dask

问题描述

对不起,如果标题不是很描述,但我想要的是以下内容

我有一个 DataArray,坐标为 xyt。我还有一个 N 坐标列表,我想进行插值以获得 N 插值列表。但是,我不太知道如何使用 xarray 做到这一点,同时仍然利用 dask 的并行性。这是一个带有随机值的示例:

import numpy as np
import xarray as xr

x = np.linspace(0,1,10)
datar = xr.DataArray(np.random.randn(10,10,10),dims=('x','y','t'),coords=dict(x=x,y=x,t=x))
datar = datar.chunk(dict(t=1))

points = np.array([(0.1,0.1,0.1),(0.2,0.3,0.3),(0.6,0.6,0.6),])

ivals = []
for point in points:
    x0,y0,t0 = point
    interp_val = datar.interp(x=x0,y=y0,t=t0)
    ivals.append(float(interp_val))
print(ivals)

这给了我 [-1.7047738779949937,0.9568015637947849,0.04437392968785547] 的正确结果。

有没有什么方法可以达到同样的结果,但要利用 dask

如果我天真地将列表传递给插值函数,我会得到一个 3 立方矩阵:

In [35]: x0s,y0s,t0s = points.T
    ...: print(datar.interp(x=x0s,y=y0s,t=t0s))
    ...: 
<xarray.DataArray (x: 3,y: 3,t: 3)>
dask.array<dask_aware_interpnd,shape=(3,3,3),dtype=float64,chunksize=(3,chunktype=numpy.ndarray>
Coordinates:
  * x        (x) float64 0.1 0.2 0.6
  * y        (y) float64 0.1 0.3 0.6
  * t        (t) float64 0.1 0.3 0.6

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)