Saya menggunakan numpy.linalg.eig untuk mendapatkan daftar eigenvalues dan eigenvectors:
A = someMatrixArray
from numpy.linalg import eig as eigenValuesAndVectors
solution = eigenValuesAndVectors(A)
eigenValues = solution[0]
eigenVectors = solution[1]
Saya ingin mengurutkan eigenvalues saya (misalnya dari yang terendah ke tertinggi), dengan cara yang saya tahu apa vektor eigen terkait setelah penyortiran.
Saya tidak menemukan cara untuk melakukan itu dengan fungsi python. Apakah ada cara sederhana atau saya harus mengkodekan versi sortir saya?
idx = eigenValues.argsort()[::-1]
.eigenVectors[:, eigenValues.argmax()]
Jawaban di atas oleh unutbu sangat tajam dan ringkas. Tapi, berikut adalah cara lain yang bisa kita lakukan yang lebih umum dan juga bisa digunakan untuk daftar.
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] ini adalah nilai eigen berdasarkan fungsi sortir yang akan mengurutkan daftar.
reverse = False untuk meningkatkan order.
sumber
Potongan kode ubuntu tidak berfungsi pada Python 3.6.5 saya. Ini menyebabkan kesalahan run-time. Jadi, saya memperbarui kodenya menjadi yang ini yang berfungsi dengan baik pada kasus pengujian saya:
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)
sumber