我正在尝试使用包含多个要相乘的矩阵的数组来评估矩阵乘法。这可以通过使用 np.dot (或 Py3.5 + 中的新 @ 运算符)的两个矩阵轻松实现,但我正在努力扩展它以有效地评估我的多维数组。
举个例子,假设我有形状为 (5,3,3) 的矩阵 A 和形状为 (5,3) 的矩阵 B。现在,我想对每 5 个案例的后面部分进行矩阵处理:即
res[0] = np.dot(A[0], B[0])
res[1] = np.dot(A[1], B[1])
etc
我可以使用循环成功实现这一点 - 例如:
A = np.random.random((5,3,3))
B = np.random.random((5,3))
res = np.zeros([5,3])
for i in range(len(A)):
res[i] = np.dot(A[i], B[i])
尽管这很慢,因为它使用了循环。
有没有我可以采取的函数/方法来完全矢量化它?
谢谢。
最佳答案
您可以使用np.einsum
-
np.einsum('ijk,ik->ij',A,B)
使用np.matmul
-
np.matmul(A,B[...,None]).squeeze()
np.matmul(A,B[...,None])[...,0]
关于python - 多维矩阵(/数组)的矩阵乘法 - 如何避免循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42976728/