Ing*_*ngo 14 python numpy scipy
我刚开始学习SciPy并且正在努力学习最基本的功能.
考虑以下标准向量:
In [6]: W=array([[1],[2]])
In [7]: print W
[[1]
[2]]
Run Code Online (Sandbox Code Playgroud)
如果我理解正确,这应该是标准2x1数学向量的SciPy表示,如下所示:
(1)
(2)
Run Code Online (Sandbox Code Playgroud)
这个向量的点积应该是1*1+2*2=5.但是,这在SciPy中不起作用:
In [16]: dot(W, W)
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
/home/ingo/<ipython-input-16-961b62a82495> in <module>()
----> 1 dot(W, W)
ValueError: objects are not aligned
Run Code Online (Sandbox Code Playgroud)
请注意以下工作.(1 2)如果我没有弄错的话,这应该是表格的矢量.
In [9]: V=array([1,2])
In [10]: print V
[1 2]
In [11]: dot(V, V)
Out[11]: 5
Run Code Online (Sandbox Code Playgroud)
我的误解是什么?我究竟做错了什么?
tal*_*ies 14
这里的关键是numpy/scipy在计算点积时尊重数组的形状.看看你的第一个例子,W是一个2x1数组:
In [7]: W=array([[1],[2]])
In [8]: print W.shape
------> print(W.shape)
(2, 1)
Run Code Online (Sandbox Code Playgroud)
因此,有必要使用转置运算符来计算W自身的点(内)积:
In [9]: print dot(W.T,W)
------> print(dot(W.T,W))
[[5]]
In [10]: print np.asscalar(dot(W.T,W))
-------> print(np.asscalar(dot(W.T,W)))
5
Run Code Online (Sandbox Code Playgroud)
amc*_*abb 11
您应该使用vdot:"返回两个向量的点积." 此函数展平输入参数并提供您期望的结果.对于你的例子:
>>> W = np.array([[1], [2]])
>>> np.vdot(W, W)
5
>>>
Run Code Online (Sandbox Code Playgroud)