python numpy排序特征值

use*_*022 5 python numpy

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

ely*_*ely 7

您想使用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]
Run Code Online (Sandbox Code Playgroud)

  • 在你的第二个例子中,不需要再次在eig_vals上调用sort(),你已经有了sort_perm.即eig_vals = eig_vals [sort_perm] (7认同)
  • eig_vecs是列向量,所以它应该是eig_vecs [:,eig_vals.argsort()],对吧? (2认同)