假设我有一个ndarray,W形状(m,n,n)和一个维度(m,n)的向量C.我需要以下列方式将这两者相乘
result = np.empty(m,n)
for i in range(m):
result[i] = W[i] @ C[i]
如何在没有循环的情况下以矢量化方式执行此操作?
答案 0 :(得分:1)
因为,您需要保持W
和C
对齐的第一个轴,同时使用矩阵乘法从它们中丢失最后一个轴,我建议使用np.einsum
一种非常有效的方法,如此 -
np.einsum('ijk,ik->ij',W,C
)
np.tensordot
或np.dot
没有保持轴对齐的功能以及np.einsum
改进的地方。
答案 1 :(得分:0)
答案 2 :(得分:0)
使用np.tensordot
完成ans=np.tensordot(W,C,axes=[2,1])[np.arange(m),:,np.arange(m)]
assert np.all(result==ans)