Я использую numpy.linalg.eig для получения списка собственных значений и собственных векторов:
A = someMatrixArray
from numpy.linalg import eig as eigenValuesAndVectors
solution = eigenValuesAndVectors(A)
eigenValues = solution[0]
eigenVectors = solution[1]
Я хотел бы отсортировать свои собственные значения (например, от наименьшего к наибольшему) таким образом, чтобы я знал, каков связанный собственный вектор после сортировки.
Я не нахожу никакого способа сделать это с функциями Python. Есть ли простой способ или мне нужно кодировать свою версию сортировки?
idx = eigenValues.argsort()[::-1]
.eigenVectors[:, eigenValues.argmax()]
Приведенный выше ответ unutbu очень четкий и лаконичный. Но есть еще один способ сделать это, более общий, который также можно использовать для списков.
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)
Это tup [0] - собственное значение, на основе которого функция сортировки сортирует список.
reverse = False для увеличения порядка.
источник
Часть кода Ubuntu не работает на моем Python 3.6.5. Это приводит к ошибкам во время выполнения. Итак, я реорганизовал его код на этот, который нормально работает в моих тестовых примерах:
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)
источник