scipy.linalg.eig возвращает комплексные собственные значения для ковариационной матрицы?

Собственные значения ковариационной матрицы должны быть действительными и неотрицательными, потому что ковариационные матрицы симметричны и полуположительно определены.

Однако взгляните на следующий эксперимент с scipy:

>>> a=np.random.random(5)
>>> b=np.random.random(5)
>>> ab = np.vstack((a,b)).T
>>> C=np.cov(ab)
>>> eig(C)
7.90174997e-01 +0.00000000e+00j,
2.38344473e-17 +6.15983679e-17j,
2.38344473e-17 -6.15983679e-17j,
-1.76100435e-17 +0.00000000e+00j,   
5.42658040e-33 +0.00000000e+00j

Однако воспроизведение приведенного выше примера в Matlab работает правильно:

a = [0.6271, 0.4314, 0.3453, 0.8073, 0.9739]
b = [0.1924, 0.3680, 0.0568, 0.1831, 0.0176]
C=cov([a;b])
eig(C)
-0.0000
-0.0000
 0.0000
 0.0000
 0.7902
15
задан Saullo G. P. Castro 12 May 2013 в 21:49
поделиться