假设我有一个形状(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]
如何以矢量化的方式执行此操作,而无需循环和全部?
假设我有一个形状(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]
如何以矢量化的方式执行此操作,而无需循环和全部?
因为,你需要保持来自W
和C
第一轴一致,从他们与矩阵乘法失去最后的轴做的,我会建议使用np.einsum
一个非常有效的方法,像这样 -
np.einsum('ijk,ik->ij',W,C
)
np.tensordot
或np.dot
没有保持轴对齐的功能,这是np.einsum
改进之处。
它使用np.tensordot
ans=np.tensordot(W,C,axes=[2,1])[np.arange(m),:,np.arange(m)]
assert np.all(result==ans)