当我试图计算w^T * x使用numpy的,对我来说是超级混乱以及。事实上,我自己无法实现。所以,这是NumPy中我们需要熟悉的几个陷阱之一。
至于1D阵列而言,有的行向量和列向量之间没有区别。他们完全一样。
请看下面的例子,在这里我们得到了相同的结果,在所有情况下,这是不是在真正的线性代数(的理论意义):
In [37]: w
Out[37]: array([0, 1, 2, 3, 4])
In [38]: x
Out[38]: array([1, 2, 3, 4, 5])
In [39]: np.dot(w, x)
Out[39]: 40
In [40]: np.dot(w.transpose(), x)
Out[40]: 40
In [41]: np.dot(w.transpose(), x.transpose())
Out[41]: 40
In [42]: np.dot(w, x.transpose())
Out[42]: 40
有了这些信息,现在让我们尝试计算矢量的平方长度|w|^2。我们需要将w转换为2D数组。
In [51]: wt = w[:, np.newaxis]
In [52]: wt
Out[52]:
array([[0],
[1],
[2],
[3],
[4]])
现在,让我们来计算矢量w的平方长度(或平方幅度):
In [53]: np.dot(w, wt)
Out[53]: array([30])
请注意,我们使用w,wt代替wt,w(如在理论线性代数)因为形状与使用np.dot(wt,w)不匹配。所以,我们有矢量的平方长度为[30]。也许这是区分(numpy的解释)行列向量的方法之一吗?
最后,我有没有提到,我想通过实施w^T * x的方式?是的,我所做的:
In [58]: wt
Out[58]:
array([[0],
[1],
[2],
[3],
[4]])
In [59]: x
Out[59]: array([1, 2, 3, 4, 5])
In [60]: np.dot(x, wt)
Out[60]: array([40])
所以,在与NumPy,操作数的顺序是相反的,如上述证明,相反的是,我们在理论上的线性代数研究。