我试图将两个形状为M1(10,3,4)和M2(25,4,1)的3D阵列相乘。我可以执行这样的操作
目前,我正在使用循环执行此操作。
for i in range(M2.shape[0]):
a[i] = np.matmul(M1,M2[i].reshape(1,4,1))
然后我追加每个循环的结果并创建一个矩阵。我想避免for循环并尝试仅使用矩阵运算执行相同的操作。是否有任何方法可以使用python中的numpy或任何其他库来执行此操作?请提供示例代码。
您可以使用np.einsum
来解决这个问题
M1 = np.random.randn(10,3,4)
M2 = np.random.randn(25,4,1)
out = np.einsum('abc,dce->dabe', M1, M2)
print(out.shape)
Out: (25, 10, 3, 1)
在上面,abc
是M1
的尺寸,而dce
是M2
的尺寸。注意,c
是M1
和M2
的共同维度。
尝试numpy.tensordot,这是用于更高维矩阵乘法的
import numpy as np
a = np.arange(60.).reshape(3,4,5)
b = np.arange(24.).reshape(4,3,2)
c = np.tensordot(a,b, axes=([1,0],[0,1]))