我正在使用linalg.eig(A)获取矩阵的特征值和特征向量。是否有一种简单的方法来按顺序排序这些特征值(和相关向量)?
sort()
和argsort()
函数。argsort()
返回排序数组所需的索引置换,因此如果你想按特征值大小排序(NumPy数组的标准排序似乎是从最小到最大),可以这样做: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]
np.linalg.eig
通常会返回复数值。您可能需要考虑使用 np.sort_complex(eig_vals)
。
linalg.eigh
。 - Jack Valmadre
linalg.eigh()
将按升序返回实数特征值。https://numpy.org/doc/stable/reference/generated/numpy.linalg.eigh.html - Jack Valmadre