python numpy排序特征值

问题描述:

我正在使用linalg.eig(A)来获取矩阵的特征值和特征向量。有没有简单的方法来排序这些特征值(和相关向量)?python numpy排序特征值

+0

可能的重复:http://*.com/questions/8092920/sort-eigenvalues-and-associated-eigenvectors-after-using-numpy-linalg-eig-in-pyt – amcnabb 2013-05-07 17:58:10

您想使用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] 
+7

在你的第二个例子中,不需要再次调用eig_vals上的sort(),你已经有了sort_perm。即eig_vals = eig_vals [sort_perm] – user545424 2012-04-10 16:25:14

+0

好点!我不确定是否使用切片符号'[]'制作了列表的额外副本。我的想法是,他们中的至少一个可以完成,我不知道'a = a [sort_perm]'是否与'a.sort()'一样高效。 – ely 2012-04-10 19:18:39

+0

是啊,我可以做一个基准测试并发布结果 – user545424 2012-04-10 19:57:48

np.linalg.eig通常会返回复杂的值。您可能需要考虑使用np.sort_complex(eig_vals)