我正在尝试使用numpy将两个矩阵相乘:
import numpy as np
A = np.array([[1, 3, 2], [4, 0, 1]])
B = np.array([[1, 0, 5], [3, 1, 2]])
我使用矩阵乘法公式测试了过程并手动运行计算。因此,在这种情况下,我将首先乘以[1, 0, 5] x A
,结果为[11, 9]
,然后再乘以[3, 1, 2] x B
,结果为[10, 14]
。最后,此乘法的乘积为[[11, 9], [10, 14]]
尽管如此,当我使用numpy将这些矩阵相乘时,出现了错误:
ValueError: shapes (2,3) and (2,3) not aligned: 3 (dim 1) != 2 (dim 0)
有没有办法用python成功做到这一点?
答案 0 :(得分:1)
请阅读matrix multiplication in numpy上的文档,尤其是有关行为的文档。
行为通过以下方式取决于参数。
如果两个参数都是二维的,则它们像常规的那样相乘 矩阵。如果任一参数为N-D,N> 2,则将其视为堆栈 最后两个索引中的矩阵的分布并进行广播 相应地。如果第一个参数是1-D,则将其提升为矩阵 在其尺寸前面加上1。矩阵相乘后 前置1被删除。如果第二个参数是1-D,则将其提升 通过将1附加到矩阵的尺寸来将其添加到矩阵。后矩阵 附加的1被删除。
要获得输出,请尝试在转乘前进行转置?
c=np.matmul(A,B.transpose())
array([[11, 10],
[ 9, 14]])