首页 > 解决方案 > ndarray的矩阵乘法

问题描述

例如,我有一个矩阵A = np.array([[1,0],[0,1]])和 ndarray 形式B = np.array([[1,2],[3,4],[5,6]])。我想要矩阵的每个数组的矩阵B乘法A

我做了一个for循环,像这样

C = []
for b in B:
    C.append(np.matmul(A,b))
C=np.array(C)

出去[]:

array([[1, 2],
   [3, 4],
   [5, 6]])

但我知道这个循环很耗时。有更好的方法吗?

标签: pythonnumpy

解决方案


当你用矩阵乘法维度做有趣的事情时,einsum可以帮助澄清发生了什么。

In [40]: np.einsum('ij,kj->ki',A,B)
Out[40]: 
array([[1, 2],
       [3, 4],
       [5, 6]])

在这里,我们正在对维度进行乘积之j和,并将B's第一个维度放在结果中。普通的 matmul 将是ij,jk->ik. 从那里我们可以看到另一个答案中需要两个转置。

(A@B.T).T

推荐阅读