例如,我有一个矩阵, A = np.array([[1,0],[0,1]]) 以及表格的排列 B = np.array([[1,2],[3,4],[5,6]]) . 我想要数组中每个数组的矩阵乘法 B 根据矩阵 A .我做了一个循环,像这样
A = np.array([[1,0],[0,1]])
B = np.array([[1,2],[3,4],[5,6]])
B
A
C = []for b in B: C.append(np.matmul(A,b))C=np.array(C)
C = []
for b in B:
C.append(np.matmul(A,b))
C=np.array(C)
出[]:
array([[1, 2], [3, 4], [5, 6]])
array([[1, 2],
[3, 4],
[5, 6]])
但我知道这个周期很耗时。有更好的方法吗?
siotufzp1#
当你用矩阵乘法做一些有趣的事情时, einsum 可以帮助澄清发生了什么。
einsum
In [40]: np.einsum('ij,kj->ki',A,B)Out[40]: array([[1, 2], [3, 4], [5, 6]])
In [40]: np.einsum('ij,kj->ki',A,B)
Out[40]:
在这里,我们计算了 j 尺寸和推杆 B's 第一维度是结果中的第一维度。普通的matmul是 ij,jk->ik . 从这一点我们可以看出,在另一个答案中需要两个转置。
j
B's
ij,jk->ik
(A@B.T).T
4jb9z9bj2#
两件事:首先,你可以使用正规矩阵乘法和转置。第二,你可以使用 @ 在python中请求矩阵乘法。所以试试看
@
或同等地
(B@A.T)
2条答案
按热度按时间siotufzp1#
当你用矩阵乘法做一些有趣的事情时,
einsum
可以帮助澄清发生了什么。在这里,我们计算了
j
尺寸和推杆B's
第一维度是结果中的第一维度。普通的matmul是ij,jk->ik
. 从这一点我们可以看出,在另一个答案中需要两个转置。4jb9z9bj2#
两件事:首先,你可以使用正规矩阵乘法和转置。第二,你可以使用
@
在python中请求矩阵乘法。所以试试看
或同等地