广播矩阵向量点积(Broadcasting matrix-vector dot product)

2019-10-20 06:34发布

我有一组在3-d阵列形状收集矩阵(1222, 47, 47)并在2 d阵列一组向量具有形状(1222, 47)

是否有广播方式乘以每个[47x47]矩阵与其对应的[47]向量? 随着一个完整的循环,这将是

numpy.vstack([A[n, :, :].dot(xb[n, :]) for n in range(A.shape[0])])

这是好的,为1222元,但越到后来,我可能有很多。 我想,如果dotmatrix_multiplyinner ,或inner1d将适合该法案,结合transpose ,但我并没有完全得到它。 可以这样做?

Answer 1:

所有这些应该这样做:

matrix_multiply(matrices, vectors[..., None])
np.einsum('ijk,ik->ij', matrices, vectors)

没有人会拿一个高度优化的库的优势,虽然。

在未来某个时候,当PEP 465已经实现,使用Python> = 3.5,你应该能够简单地做:

matrices @ vectors[..., None]


文章来源: Broadcasting matrix-vector dot product