Python特征值和特征向量

时间:2014-03-31 20:24:13

标签: python numpy eigenvalue

我有一个336x336的共同保证矩阵,我使用numpy计算了特征值和特征向量,如下所示。

evals, evecs = np.linalg.eig(cov)
idx = evals.argsort()   
evals = evals[idx] 
evecs = evecs[:,idx]

问题是,与其他值相比,evals中的最后一个值是奇怪的。 像这样:

    evals[:3]
    [ -6.11117191e-19  -6.11117191e-19  -1.08420217e-19]
    evals[-3:]
    [  4.29345466e-19   7.08196415e-19   1.69419875e-02]

与其他值相比,最高特征值1.69419875e-02非常高。我已经检查了所有336个特征值,除了这个特征值之外或多或少都在同一范围内。

任何人都可以告诉我为什么会这样。

嗨mrcl,    谢谢您的回复。我已经使用您建议的精度生成了8x8协方差矩阵。它现在看起来像这样:

[[  0.00e+00   0.00e+00   0.00e+00   0.00e+00   0.00e+00   0.00e+00   0.00e+00   0.00e+00]
  [  0.00e+00   4.62e-05   9.25e-05   4.62e-05   0.00e+00  -9.25e-05  -4.62e-05  -4.62e-05]
  [  0.00e+00   9.25e-05   1.85e-04   9.25e-05   0.00e+00  -1.85e-04  -9.25e-05  -9.25e-05]
  [  0.00e+00   4.62e-05   9.25e-05   4.62e-05   0.00e+00  -9.25e-05  -4.62e-05  -4.62e-05]
  [  0.00e+00   0.00e+00   0.00e+00   0.00e+00   0.00e+00   0.00e+00   0.00e+00   0.00e+00]
  [  0.00e+00  -9.25e-05  -1.85e-04  -9.25e-05   0.00e+00   1.85e-04   9.25e-05   9.25e-05]
  [  0.00e+00  -4.62e-05  -9.25e-05  -4.62e-05   0.00e+00   9.25e-05   4.62e-05   4.62e-05]
  [  0.00e+00  -4.62e-05  -9.25e-05  -4.62e-05   0.00e+00   9.25e-05   4.62e-05   4.62e-05]]

对于第1列和第1行,我不确定为什么所有都为零,我手动计算这些列和行的协方差而且它只是零,可能是原始值没有太大变化,原来值是:

0.06  0.05  0.05  0.08  0.05  0.06  0.06  0.02

0.06  0.04  0.03  0.07  0.05  0.08  0.07  0.03

谢谢!

2 个答案:

答案 0 :(得分:1)

这意味着除了一个特征值之外,所有特征值都为零。我认为你的矩阵可能不是一个完整的秩矩阵。

答案 1 :(得分:0)

@newbie

基于8x8矩阵,我注意到一个零行和列的模式,每个都重复 第四列或第二列。每当矩阵的列或行用零填满时,这使得行列式为零并且矩阵是单数的,因此您的cov矩阵没有逆。在这种情况下,返回的特征值与奇异值分解(SVD)中的奇异值相同。

我建议你仔细检查协方差矩阵计算导致行和列满零的原因,即使在主对角线上也是如此。

希望它有所帮助。