我刚开始学习SciPy,正在努力学习最基本的功能。
考虑以下标准向量:
In [6]: W=array([[1],[2]])
In [7]: print W
[[1]
[2]]
如果我理解正确,这应该是标准2x1数学向量的SciPy表示,如下所示:
(1)
(2)
这个向量的点积应该是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
请注意,以下操作有效。如果我没有弄错的话,这应该是(1 2)
形式的向量。
In [9]: V=array([1,2])
In [10]: print V
[1 2]
In [11]: dot(V, V)
Out[11]: 5
我的误解是什么?我做错什么了?
这里的关键是numpy/scipy在计算点产品时尊重数组的形状。看第一个例子,
W
是一个2x1数组:因此,有必要使用转置运算符计算W的点(内)积:
您应该使用
vdot
:“返回两个向量的点积。”此函数展平输入参数并给出预期的结果。例如:在第一种情况下,numpy将向量生成为二维数组,基本上是一个2乘1矩阵。在这种情况下,不能取点积,因为m乘n矩阵只能用n乘k矩阵点。解决方法是使用:
这与x.x有时被写成x^T x的方式相同
在第二种情况下,为了方便起见,numpy生成的是一维数组而不是矩阵,因此点积有一个简单的定义。如果要生成1乘2矩阵
然后你会得到和第一个案例一样的行为。
相关问题 更多 >
编程相关推荐