numpy.dot文档字符串显示:
对于二维数组,它等价于矩阵乘法,而对于一维数组则是向量的内积(没有复共轭)。对于n维,它是A的最后一个轴和B的第二个到最后的一个和积。
但它并没有说明numpy.dot如何用二维数组计算一维数组,那么numpy如何用二维数组(矩阵)处理一维数组(向量)?
我做了一些测试:In [27]: a
Out[27]:
array([[0, 1, 2],
[3, 4, 5],
[6, 7, 8]])
In [28]: b
Out[28]: array([0, 1, 2])
In [29]: np.dot(a,b)
Out[29]: array([ 5, 14, 23])
In [30]: np.dot(a, b.reshape(-1,1))
Out[30]:
array([[ 5],
[14],
[23]])
In [31]: np.dot(a, b.reshape(-1,1)).ravel() # same as np.dot(a,b)
Out[31]: array([ 5, 14, 23])
In [32]: np.dot(b,a)
Out[32]: array([15, 18, 21])
In [33]: np.dot(b.reshape(1,-1), a)
Out[33]: array([[15, 18, 21]])
In [34]: np.dot(b.reshape(1,-1), a).ravel() # same as np.dot(b,a)
Out[34]: array([15, 18, 21])
以上测试表明numpy.dot可以处理一维数组和二维数组。对吗?
最佳答案:
一维数组和二维数组作为矩阵向量(或向量矩阵)乘积处理。实际上,实现使用blas*gemv函数来处理浮点输入的这种情况。