【发布时间】:2014-05-11 09:02:31
【问题描述】:
我有一个 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 个特征值,除此之外的所有特征值或多或少都在同一范围内。
谁能告诉我为什么会这样。
嗨,先生, 感谢你的回复。我使用您建议的精度生成了 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
谢谢!
【问题讨论】:
-
什么是“共同保险矩阵”?
-
这是一道数学题,不是编程题。我已将其标记并建议将其移至math.stackexchange.com。
-
还有
np.diag(cov)的样子? -
这可能是除了一个特征值之外的所有特征值都是 0,而您看到的是数字噪声。
cov是如何生成的?
标签: python numpy eigenvalue