如何在numpy中执行堆叠/逐元素矩阵矢量乘法?

时间:2018-07-23 12:44:35

标签: python numpy

假设我们有一堆3×3矩阵以及一堆3维向量:

N = 100
matrices = np.random.rand(N, 3, 3) # shape: (100, 3, 3)
vectors = np.random.rand(N, 3)     # shape: (100, 3)

如何执行“按元素排列”的矩阵/矢量乘法,例如result[0]是由matrices[0]vector[0]的矩阵/向量相乘得到的3维向量。

由于形状不匹配,直接使用np.dotnp.matmulnp.prod失败。有广播技巧可以使这项工作成功吗?

1 个答案:

答案 0 :(得分:0)

np.sum(matrices * vectors[:,:,None], axis=(0,1))

None向矢量添加一个虚轴,该虚轴将与matrices的第三轴相匹配。在OP中链接的einsum方法似乎更快:

np.einsum('ijk,ij->k', matrices, vectors)