我有一个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
谢谢!
答案 0 :(得分:1)
这意味着除了一个特征值之外,所有特征值都为零。我认为你的矩阵可能不是一个完整的秩矩阵。
答案 1 :(得分:0)
@newbie
基于8x8矩阵,我注意到一个零行和列的模式,每个都重复 第四列或第二列。每当矩阵的列或行用零填满时,这使得行列式为零并且矩阵是单数的,因此您的cov矩阵没有逆。在这种情况下,返回的特征值与奇异值分解(SVD)中的奇异值相同。
我建议你仔细检查协方差矩阵计算导致行和列满零的原因,即使在主对角线上也是如此。
希望它有所帮助。