【发布时间】:2014-02-12 22:20:26
【问题描述】:
我正在使用 numpy 来获取矩阵的特征值/特征向量。我的矩阵是对称且正的。
> mat
matrix([[ 1., 1., 0., 0., 0., 0., 0.],
[ 1., 2., 0., 0., 0., 0., 0.],
[ 0., 0., 1., 0., 0., 0., 0.],
[ 0., 0., 0., 2., 1., 1., 0.],
[ 0., 0., 0., 1., 2., 1., 0.],
[ 0., 0., 0., 1., 1., 1., 0.],
[ 0., 0., 0., 0., 0., 0., 1.]])
我使用np.eigh,因为我的矩阵是对称的。
> import numpy.linalg as la
> la.eigh(mat)
(array([ 0.27, 0.38, 1. , 1. , 1. , 2.62, 3.73]),
matrix([[ 0. , -0.85, -0. , 0. , 0. , 0.53, 0. ],
[ 0. , 0.53, -0. , 0. , 0. , 0.85, 0. ],
[ 0. , 0. , -0. , 1. , 0. , 0. , 0. ],
[-0.33, -0. , -0.71, -0. , -0. , -0. , -0.63],
[-0.33, -0. , 0.71, -0. , -0. , -0. , -0.63],
[ 0.89, -0. , -0. , -0. , -0. , -0. , -0.46],
[-0. , -0. , -0. , -0. , 1. , -0. , -0. ]]))
我的问题是其中许多值的符号错误。特别是,主特征向量(矩阵中最右边的列)在应该为正时都是负的。我已经对照 matlab 和 octave 对此进行了检查。这只是一个精度错误,还是我遗漏了什么?
如果是错误,有什么方法可以检查并纠正这种错误吗?
编辑:这个计算是Hubs and Authorities 的一部分,上面的矩阵是 A*A^T。这是the original paper (see p.9, p.10) 的结果,集线器分数收敛到 A*A^T 的主特征向量。最终,我们希望将这些中心分数相互比较,因此该标志实际上很重要。
在第 10 页,论文还说,“另外(作为推论),如果 M 只有非负项,则 M 的主特征向量只有非负项。”这就是我问这个问题的原因。
【问题讨论】:
-
结果正确。特征向量的符号没有定义,是任意的。
-
这些参考资料都没有与未定义特征向量的符号这一事实相矛盾。如果您的问题需要,您当然可以修复阶段约定,但通常不会这样做(因为问题各不相同)。
标签: python numpy eigenvalue