Numpy 2-D&3-D矩阵“行”乘法

时间:2019-05-10 03:56:28

标签: python python-3.x numpy numpy-ndarray

我开始学习numpy,并尝试在2维和3维矩阵之间进行一种奇怪的矩阵乘法。我有一个功能可以满足我的需求,但是我很好奇是否有更好的方法。

让我们考虑一下,我们有一个矩阵(M1)具有(KxN)个维,还有另一个矩阵(M2)具有(KxNxN)个维。我正在尝试将M1的每(1xN)行与M2的相应(NxN)矩阵相乘。这是我的带有示例矩阵的代码:

a = [[1., 2., 3.],
     [0., 9., 8.]]
a = np.array(a)
b = [[[.5, .5, .5],
      [.5, .5, .5],
      [.5, .5, .5]],
     [[.25, .25, .25],
      [.25, .25, .25],
      [.25, .25, .25]]]
b = np.array(b)

c = [[5., 5., 5., 5., 5.]]
c = np.array(c)
d = [[[.1, .1, .1, .1, .1],
      [.2, .2, .2, .2, .2],
      [.3, .3, .3, .3, .3],
      [.4, .4, .4, .4, .4],
      [.5, .5, .5, .5, .5]]]
d = np.array(d)


def mul(x, y):
    result = []
    for i in range(len(x)):
        result.append(x[i] @ y[i])
    return np.array(result)


print(mul(a, b))
[[3.   3.   3.  ]
 [4.25 4.25 4.25]]
print(mul(c, d))
[[7.5 7.5 7.5 7.5 7.5]]

我认为这很清楚。我敢肯定有更好的方法可以做到这一点,但是到目前为止我还无法提出一种方法。我一直在尝试apply_along_axis并乘以,但是我可能完全偏离了轨道。

1 个答案:

答案 0 :(得分:0)

您可以使用Cron Job in hostgator-

np.einsum('ij,ijk->ik',array1,array2)

或者在np.matmul上使用@Python 3.x运算符-

np.matmul(array1[:,None,:],array2)[:,0]
(array1[:,None,:] @ array2)[:,0]