dask.array.apply_gufunc具有不同形状的多个输出

dask.array.apply_gufunc具有不同形状的多个输出,dask,python-xarray,Dask,Python Xarray,我正在尝试将ufunc应用于分块可广播dask阵列,该阵列产生多个不同形状的输出: 将dask.array作为dask导入。dask版本为1.2.0 将numpy作为np导入 def func(A3、A2): 返回A3+A2,A2**2 A3=da.from_数组(np.random.randn(3,5,5),chunks=(3,2,2)) A2=da.from_数组(np.random.randn(5,5),chunks=(2,2)) ret=da.apply_gufunc(func,'(),

我正在尝试将ufunc应用于分块可广播dask阵列,该阵列产生多个不同形状的输出:

将dask.array作为dask导入。dask版本为1.2.0
将numpy作为np导入
def func(A3、A2):
返回A3+A2,A2**2
A3=da.from_数组(np.random.randn(3,5,5),chunks=(3,2,2))
A2=da.from_数组(np.random.randn(5,5),chunks=(2,2))
ret=da.apply_gufunc(func,'(),()->(),()',A3,A2,输出_数据类型=[float,float])
对于ret中的r:
印刷品(r)
r、 计算()
问题是
ret
中的两个输出都假定为形状(3,5,5),然后在
.compute()
上失败,出现
ValueError:第二个输出的轴与数组不匹配,应该是二维的

在这种情况下如何使用
apply_gufunc


注意:我可能更愿意使用
xarray。在这种情况下应用_ufunc
,但不幸的是,它还不能用于多个输出(请参见)。

这里有一个解决方法,可以帮助:

def func(A3, A2):
    return A3+A2, (A2**2)[np.newaxis,:]

是的,因为这个问题获得了“风滚草”徽章\o/不幸的是,没有太多的维护人员熟悉gufunc语义@shoyer是你最好的选择,但我认为他最近很忙。谢谢你的帮助!问题是所有输出都被强制为相同的形状,因此
ret[1]。形状==(3,5,5)
。它希望它保持形状
(5,5)
,或者至少
(1,5,5)