los vectores propios creados por numpy.linalg.eig no parecen correctos

Creo una matriz 2×2 arbitraria:

In [87]: mymat = np.matrix([[2,4],[5,3]]) In [88]: mymat Out[88]: matrix([[2, 4], [5, 3]]) 

Intento calcular vectores propios usando numpy.linalg.eig:

 In [91]: np.linalg.eig(mymat) Out[91]: (array([-2., 7.]), matrix([[-0.70710678, -0.62469505], [ 0.70710678, -0.78086881]])) In [92]: eigvec = np.linalg.eig(mymat)[1][0].T In [93]: eigvec Out[93]: matrix([[-0.70710678], [-0.62469505]]) 

Multiplico uno de mis vectores propios con mi matriz esperando que el resultado sea un vector que sea un múltiplo escalar de mi vector propio.

 In [94]: mymat * eigvec Out[94]: matrix([[-3.91299375], [-5.40961905]]) 

Sin embargo no lo es. ¿Alguien puede explicarme qué está mal aquí?

De la documentación para linalg.eig :

v: (…, M, M) array
Los vectores propios normalizados (unidad “longitud”), de manera que la columna v[:,i] es el vector propio correspondiente al valor propio w[i] .

Quieres las columnas, no las filas.

 >>> mymat = np.matrix([[2,4],[5,3]]) >>> vals, vecs = np.linalg.eig(mymat) >>> vecs[:,0] matrix([[-0.70710678], [ 0.70710678]]) >>> (mymat * vecs[:,0])/vecs[:,0] matrix([[-2.], [-2.]]) >>> vecs[:,1] matrix([[-0.62469505], [-0.78086881]]) >>> (mymat * vecs[:,1])/vecs[:,1] matrix([[ 7.], [ 7.]]) 

No, es verdad. numpy no funciona correctamente. Ejemplo:

 A Out[194]: matrix([[-3, 3, 2], [ 1, -1, -2], [-1, -3, 0]]) E = np.linalg.eig(A) E Out[196]: (array([ 2., -4., -2.]), matrix([[ -2.01889132e-16, 9.48683298e-01, 8.94427191e-01], [ 5.54700196e-01, -3.16227766e-01, -3.71551690e-16], [ -8.32050294e-01, 2.73252305e-17, 4.47213595e-01]])) A*E[1] / E[1] Out[205]: matrix([[ 6.59900617, -4. , -2. ], [ 2. , -4. , -3.88449298], [ 2. , 8.125992 , -2. ]])