执行numpy.dot()时获取值错误

时间:2018-01-26 20:09:47

标签: python numpy multidimensional-array valueerror dot-product

我使用numpy创建了两个数组:

import numpy as np    
a = np.array([[1, 5, 7], [6, 8, 9]])
b = np.array([[1, 8, 8], [5, 8, 0], [8, 9, 0]])
np.dot(a, b)

现在,在执行np.dot(a, b)时,我收到错误:

  

ValueError:操作数无法与形状(2,3)(3,3)一起广播。

通常,如果a的最后一个维度与b的倒数第二个维度的大小不同,则会引发值错误。我的代码出了什么问题?

1 个答案:

答案 0 :(得分:5)

您的代码运行正常。请注意,当np.dot()的输入为矩阵时,np.dot()执行矩阵乘法

In [18]: a = np.array([[1, 5, 7], [6, 8, 9]])
    ...: b = np.array([[1, 8, 8], [5, 8, 0], [8, 9, 0]])
    ...: 

# @ is equivalent to `np.dot()` and `np.matmul()` in Python 3.5 and above
In [19]: a @ b
Out[19]: 
array([[ 82, 111,   8],
       [118, 193,  48]])


In [20]: (a @ b).shape
Out[20]: (2, 3)

# sanity check!
In [22]: a @ b == np.matmul(a, b)
Out[22]: 
array([[ True,  True,  True],
       [ True,  True,  True]], dtype=bool)

关于@的注释:它在Python 3.5中作为dedicated infix operator for matrix multiplication

引入

这是因为*运算符是否进行矩阵乘法或逐元素乘法存在一些混淆。因此,为了消除混淆,专门的运算符@被指定用于矩阵乘法。所以,

* 执行元素乘法
@ 执行矩阵乘法(点积)