python numpy排序特征值
您想使用NumPy 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]
在你的第二个例子中,不需要再次调用eig_vals上的sort(),你已经有了sort_perm。即eig_vals = eig_vals [sort_perm] – user545424 2012-04-10 16:25:14
好点!我不确定是否使用切片符号'[]'制作了列表的额外副本。我的想法是,他们中的至少一个可以完成,我不知道'a = a [sort_perm]'是否与'a.sort()'一样高效。 – ely 2012-04-10 19:18:39
是啊,我可以做一个基准测试并发布结果 – user545424 2012-04-10 19:57:48
np.linalg.eig
通常会返回复杂的值。您可能需要考虑使用np.sort_complex(eig_vals)
。
可能的重复:http://*.com/questions/8092920/sort-eigenvalues-and-associated-eigenvectors-after-using-numpy-linalg-eig-in-pyt – amcnabb 2013-05-07 17:58:10