scipy.sparse.linalg.eigen.arpack.eigsh 不稳定
scipy.sparse.linalg.eigen.arpack.eigsh is unstable
我运行以下代码
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
谢谢!
再看一下 eigsh
的文档字符串。请特别注意两项:
eigsh
假设输入是 对称 矩阵。您的 W
不对称。如果输入数组不对称,函数的行为是未定义的。
eigsh
是迭代的,迭代需要一个起始向量。如果没有给出 v0
参数,则选择一个随机向量。所以你不一定会在重复调用时得到完全相同的结果。
我运行以下代码
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
谢谢!
再看一下 eigsh
的文档字符串。请特别注意两项:
eigsh
假设输入是 对称 矩阵。您的W
不对称。如果输入数组不对称,函数的行为是未定义的。eigsh
是迭代的,迭代需要一个起始向量。如果没有给出v0
参数,则选择一个随机向量。所以你不一定会在重复调用时得到完全相同的结果。