如何在不使用numpy或python中任何其他库的循环的情况下如何将两个3D数组相乘

时间:2019-04-12 05:56:16

标签: python numpy multidimensional-array matrix-multiplication

我正在尝试将两个3D形状为M1(10、3、4)和M2(25、4、1)的阵列相乘。我可以执行

之类的操作

当前,我正在使用循环执行此操作。

for i in range(M2.shape[0]):
        a[i] = np.matmul(M1,M2[i].reshape(1,4,1))

,然后附加每个循环的结果并创建一个矩阵。我想避免for循环,并尝试仅使用矩阵运算来执行相同的运算。 是否有任何方法可以使用numpy或python中的任何其他库来执行此操作?请为此提供示例代码。

2 个答案:

答案 0 :(得分:0)

尝试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]))

答案 1 :(得分:0)

您可以使用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)

上面,abcM1的尺寸,而dceM2的尺寸。请注意,cM1M2中的共同维度。