Los valores propios de una matriz de covarianza deben ser reales y no negativos porque las matrices de covarianza son simétricas y semi positivas definidas.scipy.linalg.eig return autovalores complejos para la matriz de covarianza?
Sin embargo, echar un vistazo al siguiente experimento con 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
Sin embargo, reproduciendo el ejemplo anterior en Matlab funciona correctamente:
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