5

在矩阵乘法中,假设A是 3 x 2 矩阵(3 行 2 列)并且B是 2 x 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 并且总是得到相同的答案。为什么?在这种情况下如何进行矩阵乘法?

4

1 回答 1

19

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.]])

此外,您可以使用矩阵类:

>>> 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 数组的信息可以在这里找到,更多关于矩阵类的信息可以在这里找到。

于 2013-08-15T15:06:23.447 回答