2016-06-10 232 views
2

假设我有一个形状(m,n,n)和维数为(m,n)的矢量C的ndarray。我需要用以下方法乘以这两个:Numpy 3D阵列矩阵乘法函数

result = np.empty(m,n) 
for i in range(m): 
    result[i] = W[i] @ C[i] 

如何以矢量化的方式执行此操作,而无需循环和全部?

回答

1

因为,你需要保持来自WC第一轴一致,从他们与矩阵乘法失去最后的轴做的,我会建议使用np.einsum一个非常有效的方法,像这样 -

np.einsum('ijk,ik->ij',W,C

np.tensordotnp.dot没有保持轴对齐的功能,这是np.einsum改进之处。

0

它使用np.tensordot

ans=np.tensordot(W,C,axes=[2,1])[np.arange(m),:,np.arange(m)] 
assert np.all(result==ans)