Ich benutze linalg.eig (A), um die Eigenwerte und Eigenvektoren einer Matrix zu erhalten. Gibt es eine einfache Möglichkeit, diese Eigenwerte (und die zugehörigen Vektoren) in der richtigen Reihenfolge zu sortieren?python numpy sort Eigenwerte
Antwort
Sie möchten die Funktionen NumPy sort()
und argsort()
verwenden. argsort()
die Permutation der Indizes gibt benötigt ein Array zu sortieren, so dass, wenn Sie mit dem Eigenwert Größe (die Standard-Art scheint für NumPy Arrays kleinsten zu größten zu sein) sortieren möchten, können Sie tun:
import numpy as np
A = np.asarray([[1,2,3],[4,5,6],[7,8,9]])
eig_vals, eig_vecs = np.linalg.eig(A)
eig_vals_sorted = np.sort(eig_vals)
eig_vecs_sorted = eig_vecs[:, eig_vals.argsort()]
# Alternatively, to avoid making new arrays
# do this:
sort_perm = eig_vals.argsort()
eig_vals.sort() # <-- This sorts the list in place.
eig_vecs = eig_vecs[:, sort_perm]
In Ihrem zweiten Beispiel keine Notwendigkeit, rufe sort() erneut auf eig_vals auf, du hast bereits sort_perm. d.h. eig_vals = eig_vals [sort_perm] – user545424
Guter Punkt! Ich war mir nicht sicher, ob mit der Slice-Notation '[]' eine zusätzliche Kopie der Liste erstellt wurde. Ich dachte, dass mindestens einer von ihnen an Ort und Stelle durchgeführt werden kann, und ich wusste nicht, ob 'a = a [sort_perm]' so effizient ist wie 'a.sort() '. – ely
yeah, ich kann ein wenig Benchmarking machen und die Ergebnisse posten – user545424
np.linalg.eig
gibt oft komplexe Werte zurück. Sie können die Verwendung von np.sort_complex(eig_vals)
in Betracht ziehen.
Mögliche doppelte: http://stackoverflow.com/questions/8092920/sort-eigenvalues-and-associated-eigenvectors-after-using-numpy-linalg-eig-in-pyt – amcnabb