在Python中使用numpy.linalg.eig后sorting特征值和相关的特征向量

我使用numpy.linalg.eig来获取特征值和特征向量列表:

A = someMatrixArray from numpy.linalg import eig as eigenValuesAndVectors solution = eigenValuesAndVectors(A) eigenValues = solution[0] eigenVectors = solution[1] 

我想sorting我的特征值(例如从最低到最高),以某种方式我知道什么是sorting后的相关特征向量。

我没有find任何使用python函数的方法。 有没有简单的方法,或者我必须编码我的sorting版本?

使用numpy.argsort 。 它返回用来sorting数组的索引。

 import numpy as np import numpy.linalg as linalg A = np.random.random((3,3)) eigenValues, eigenVectors = linalg.eig(A) idx = eigenValues.argsort()[::-1] eigenValues = eigenValues[idx] eigenVectors = eigenVectors[:,idx] 

如果特征值是复杂的, 那么sorting顺序是字典顺序的 (即,复数根据它们的实部首先sorting,并且由它们的虚部破坏联系)。

以上由unutbu回答非常简洁。 但是,我们可以通过另一种方式来做到这一点,这种方式更加通用,也可以用于列表。

 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]是sorting函数将sorting列表的特征值。

reverse = False是为了增加顺序。