numpy矩阵乘法形状

2024-05-12 15:26:50 发布

您现在位置:Python中文网/ 问答频道 /正文

在矩阵乘法中,假设A是一个3x 2矩阵(3行,2列),而B是一个2x 4矩阵(2行,4列),那么如果一个矩阵C = A * B,那么C应该有3行和4列。为什么numpy不做乘法运算?当我尝试下面的代码时,我得到一个错误:ValueError: operands could not be broadcast together with shapes (3,2) (2,4)

a = np.ones((3,2))
b = np.ones((2,4))
print a*b

我试着调换A和B,得到了同样的答案。为什么?在这种情况下如何进行矩阵乘法?


Tags: 代码numpy错误withnponesnot矩阵
1条回答
网友
1楼 · 发布于 2024-05-12 15:26:50

numpy数组的*运算符是元素相乘(类似于相同维度数组的Hadamard乘积),而不是矩阵相乘。

例如:

>>> a
array([[0],
       [1],
       [2]])
>>> b
array([0, 1, 2])
>>> a*b
array([[0, 0, 0],
       [0, 1, 2],
       [0, 2, 4]])

对于带numpy数组的矩阵乘法:

>>> a = np.ones((3,2))
>>> b = np.ones((2,4))
>>> np.dot(a,b)
array([[ 2.,  2.,  2.,  2.],
       [ 2.,  2.,  2.,  2.],
       [ 2.,  2.,  2.,  2.]])

此外,还可以使用matrix类:

>>> a=np.matrix(np.ones((3,2)))
>>> b=np.matrix(np.ones((2,4)))
>>> a*b
matrix([[ 2.,  2.,  2.,  2.],
        [ 2.,  2.,  2.,  2.],
        [ 2.,  2.,  2.,  2.]])

有关广播numpy数组的更多信息可以找到here,有关matrix类的更多信息可以找到here

相关问题 更多 >