多重矩阵乘法

Multiple matrix multiplication

在 numpy 中,我有一个 N 3x3 矩阵数组。这将是我如何存储它们的示例(我正在抽象出内容):

N = 10
matrices = np.ones((N, 3, 3))

我还有一个 3 向量数组,这就是一个例子:

vectors = np.ones((N, 3))

我似乎无法弄清楚如何通过 numpy 将它们相乘,从而实现这样的效果:

result_vectors = []
for matrix, vector in zip(matrices, vectors):
    result_vectors.append(matrix @ vector)

result_vector 的形状(转换为数组时)为 (N, 3)。 但是,由于速度问题,列表实现是不可能的。

我尝试了 np.dot 各种换位,但最终结果没有得到正确的形状。

使用np.einsum-

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

步骤:

1) 保持第一个轴对齐。

2) 将输入数组的最后一个轴相互求和。

3) 让剩余的轴(matrices 的第二个轴)逐元素相乘。