scipy.sparse.linalg.eigen.arpack.eigsh不稳定

时间:2017-01-30 16:21:46

标签: numpy scipy eigenvector

我运行以下代码

import numpy as np  
from scipy.sparse.linalg.eigen.arpack import eigsh


N =3
W = np.random.rand(N,N)

print(W)

Esys2 = eigsh(W, k=2, which = 'LA')
print(Esys2)

Esys = eigsh(W, k=2, which='LA')
print(Esys)

我得到了输出:

[[ 0.21158481  0.20105984  0.60153543]
[ 0.53304312  0.5150105   0.49034533]
[ 0.90599546  0.09468583  0.87709113]]

(array([ 0.24450196,  1.58625052]), array([[ 0.07908241,  0.47701961],
       [-0.77316975,  0.58361601],
       [ 0.62924917,  0.65714887]]))

(array([ 0.31766568,  1.85202346]), array([[ 0.02712824,  0.54350609],
       [-0.85016138,  0.45401711],
       [ 0.52582287,  0.70602379]]))        

怎么可能?输出似乎是随机的。无法计算所有三个特征向量(k = 2是最大值)。

Numpy版本:1.11.1 Python版本:3.5.2

谢谢!

1 个答案:

答案 0 :(得分:2)

再看一下eigsh的文档字符串。请特别注意两个项目:

  • eigsh假设输入是对称矩阵。您的W不对称。如果输入数组不对称,则函数的行为是不确定的。
  • eigsh是迭代的,它需要迭代的起始向量。如果没有给出v0参数,则选择随机向量。所以你不一定会在重复的电话中获得完全相同的结果。