最大的特征向量和可能的Scipy古怪

时间:2013-01-31 13:56:36

标签: python scipy eigenvector eigenvalue

不确定这是否是包装中的错误或由于其他原因,但我们继续。

我正在使用以下包在相似度得分(10x10大小)的对称矩阵中找到最大特征值及其对应的特征向量:

scipy.sparse.linalg.eigen.arpack.eigsh

,像这样:

scipy.sparse.linalg.eigen.arpack.eigsh(mymatrix, 1, which='LM')

现在的问题是,当我运行它几次(使用相同的矩阵,设置等)时,有时特征向量中的值是正的,有时是负的(参见运行3 ) 。

有谁知道为什么会这样,或者它是一个错误?似乎没有一种模式,但只有在每次迭代后运行代码而不关闭Python时才会发生(即每次运行后点击F5)。

### Run 1: ###
[[-0.31056873]
[-0.31913092]
[-0.3149287 ]
[-0.32262921]
[-0.32190688]
[-0.31292658]
[-0.32424732]
[-0.31885208]
[-0.31808024]
[-0.298174  ]]

### Run 2: ###
[[-0.31056873]
[-0.31913092]
[-0.3149287 ]
[-0.32262921]
[-0.32190688]
[-0.31292658]
[-0.32424732]
[-0.31885208]
[-0.31808024]
[-0.298174  ]]

### Run 3:###
[[ 0.31056873]
[ 0.31913092]
[ 0.3149287 ]
[ 0.32262921]
[ 0.32190688]
[ 0.31292658]
[ 0.32424732]
[ 0.31885208]
[ 0.31808024]
[ 0.298174  ]]

### Run 4: ###
[[-0.31056873]
[-0.31913092]
[-0.3149287 ]
[-0.32262921]
[-0.32190688]
[-0.31292658]
[-0.32424732]
[-0.31885208]
[-0.31808024]
[-0.298174  ]]

这不是一个主要问题,但我不喜欢我的代码中的不确定性; - )

非常感谢,

马丁

2 个答案:

答案 0 :(得分:7)

这实际上是一个数学问题。

但原因是你计算特征向量时有一个任意阶段。你正在为x解决Ax = bx。该方程在(可能是ocmplex)相位的乘法下是不变的。

至于为什么它以(看似)随机的方式发生,我不知道。但我很确定这不是一个错误。

答案 1 :(得分:0)

您正在函数的'LM'参数中使用which的函数。使用此设置,您正在搜索最高幅度的特征值,我注意到矩阵的最小和最大特征值的绝对值非常接近。
将此添加到算法估计特征值的值的事实中,您可以得到问题的答案 尝试使用which = 'LR'运行代码,这应该会为您提供具有最高实际值的特征值(无论如何,您的特征值都是实数)。