ordene los valores propios y los vectores propios asociados después de usar numpy.linalg.eig en python

Estoy usando numpy.linalg.eig para obtener una lista de valores propios y vectores propios:

A = someMatrixArray from numpy.linalg import eig as eigenValuesAndVectors solution = eigenValuesAndVectors(A) eigenValues = solution[0] eigenVectors = solution[1] 

Me gustaría ordenar mis valores propios (por ejemplo, de menor a mayor), de una manera que sé cuál es el vector propio asociado después de la clasificación.

No estoy encontrando ninguna forma de hacer eso con las funciones de python. ¿Hay alguna forma simple o tengo que codificar mi versión de clasificación?

Utilice numpy.argsort . Devuelve los índices que se usarían para ordenar la matriz.

 import numpy as np import numpy.linalg as linalg A = np.random.random((3,3)) eigenValues, eigenVectors = linalg.eig(A) idx = eigenValues.argsort()[::-1] eigenValues = eigenValues[idx] eigenVectors = eigenVectors[:,idx] 

Si los valores propios son complejos, el orden de clasificación es lexicográfico (es decir, los números complejos se ordenan de acuerdo con su parte real primero, con los lazos rotos por su parte imaginaria).

La respuesta de arriba por unutbu es muy clara y concisa. Pero, aquí hay otra forma en que podemos hacerlo de forma más general y también se puede utilizar para listas.

 eval, evec = sp.eig(A) ev_list = zip( eval, evec ) ev_list.sort(key=lambda tup:tup[0], reverse=False) eval, evec = zip(*ev_list) 

Este tup [0] es el valor propio en función del cual la función de clasificación ordenará la lista.

Invertir = Falso es para boost el orden.

El código de ubuntu no funciona en mi Python 3.6.5. Lleva errores en tiempo de ejecución. Por lo tanto, ajusté su código a este que funciona bien en mis casos de prueba:

 import numpy as np from numpy import linalg as npla # def eigen(A): eigenValues, eigenVectors = npla.eig(A) idx = np.argsort(eigenValues) eigenValues = eigenValues[idx] eigenVectors = eigenVectors[:,idx] return (eigenValues, eigenVectors)