我有一个xarray尺寸为 x、y、z的 3D DataArray,我试图scipy.ndimage.convolve在每个 xy 平面上应用,同时将输出保持为 DataArray。当然,我正试图用它xr.apply_ufunc来做到这一点。如果我只为一架飞机这样做,它就可以完美运行:
da=xr.DataArray(np.random.rand(5,5,5), dims=("x", "y", "z"))
kernel=np.ones((3,3))
from scipy.ndimage import convolve
conv1 = lambda x: convolve(x, kernel, mode="wrap")
print(xr.apply_ufunc(conv1, da[:,:,0])) # works successfully
我现在试图想出一种方法来为每个 xy 平面做同样的事情。我认为会起作用的是使用np.apply_along_axisor np.apply_over_axes,但它们都不起作用。
我可以遍历轴,将所有内容都放在一个列表中,然后进行连接,但我试图使用它xr.apply_ufunc来避免属性出现问题。有没有办法做到这一点?
这是我认为应该工作的示例,但事实并非如此:
np.apply_over_axes(conv1, c, axes=(0,1))
但这失败了
TypeError: <lambda>() takes 1 positional argument but 2 were given
互换的青春
函数式编程
相关分类