numpy.dot函数是如何工作的?

numpy.dot函数是如何工作的?,numpy,Numpy,a点(b)和b点(a)会发生什么?对于矩阵复制,a.dot(b)应该是非法的。在此设置中,b.dot(a)相当于b.T.dot(a);事实上,b和b.T恰好具有相同的形状,因此即使符号使它看起来像b是一个行向量,它实际上不是。但是,我们可以将其重新定义为显式地作为行向量,在这种情况下,操作会如预期的那样失败: import numpy as np a = np.array([[1,2],[3,4]]) b = np.array([5, 6]) a.dot(b) b.dot(a) [25]中的:

a点(b)和b点(a)会发生什么?对于矩阵复制,a.dot(b)应该是非法的。

在此设置中,
b.dot(a)
相当于
b.T.dot(a)
;事实上,
b
b.T
恰好具有相同的形状,因此即使符号使它看起来像
b
是一个行向量,它实际上不是。但是,我们可以将其重新定义为显式地作为行向量,在这种情况下,操作会如预期的那样失败:

import numpy as np
a = np.array([[1,2],[3,4]])
b = np.array([5, 6])
a.dot(b)
b.dot(a)
[25]中的
:b.dot(a)
Out[25]:数组([23,34])
In[26]:b.T.dot(a)
Out[26]:数组([23,34])
In[30]:b.形状
Out[30]:(2,)
[31]:b.T.形状
Out[31]:(2,)
在[27]中:c=b.重塑((1,2))
In[28]:c.dot(a)
Out[28]:数组([[23,34]])
In[29]:a.dot(c)
---------------------------------------------------------------------------
ValueError回溯(最近一次调用上次)
在()
---->1 a.dot(c)
ValueError:形状(2,2)和(1,2)未对齐:2(尺寸1)!=1(尺寸0)

dot
文档描述了1d阵列的特殊处理。也就是说,你可以使用内积
b.dot(b)
b.dot(b)
是内积,但是
a.dot(b)
b.dot(a)
是矩阵乘法。
b
是1d,所以不是矩阵,也不是行/列向量(或者是它)?
a.dot(b)
的工作原理最好用爱因斯坦符号来解释:
np.einsum('ij,j->j',a,b)
。或者它可以被描述为
a
b
的每一行的.dot乘积
a.dot(np.array([[5,6]])
(a(1,2)array)确实会产生错误。
In [25]: b.dot(a)
Out[25]: array([23, 34])

In [26]: b.T.dot(a)
Out[26]: array([23, 34])

In [30]: b.shape
Out[30]: (2,)

In [31]: b.T.shape
Out[31]: (2,)

In [27]: c = b.reshape((1, 2))

In [28]: c.dot(a)
Out[28]: array([[23, 34]])

In [29]: a.dot(c)
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-29-5d91888f8066> in <module>()
----> 1 a.dot(c)

ValueError: shapes (2,2) and (1,2) not aligned: 2 (dim 1) != 1 (dim 0)