多重矩阵乘法
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
的第二个轴)逐元素相乘。
在 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
的第二个轴)逐元素相乘。