У меня есть 3D xarray
DataArray с размерами x, y, z, и я пытаюсь применить 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_axis
или 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