У меня есть матрица совместного страхования 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
Спасибо!
np.diag(cov)
выглядит? - person behzad.nouri   schedule 01.04.2014cov
? - person Warren Weckesser   schedule 01.04.2014