5

我正在使用 linalg.eig(A) 来获取矩阵的特征值和特征向量。有没有一种简单的方法可以按顺序对这些特征值(和相关向量)进行排序?

4

2 回答 2

7

你想使用 NumPysort()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]
于 2012-04-10T06:09:02.393 回答
-3

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

于 2016-09-07T04:06:40.100 回答