首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在python中使用numpy.linalg.eig后对特征值和相关特征向量进行排序

在python中使用numpy.linalg.eig后对特征值和相关特征向量进行排序
EN

Stack Overflow用户
提问于 2011-11-11 18:53:36
回答 3查看 80.7K关注 0票数 112

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

代码语言:javascript
复制
A = someMatrixArray
from numpy.linalg import eig as eigenValuesAndVectors

solution = eigenValuesAndVectors(A)

eigenValues = solution[0]
eigenVectors = solution[1]

我想对我的特征值进行排序(例如,从最低到最高),在某种程度上,我知道排序后相关的特征向量是什么。

我找不到任何使用python函数来实现这一点的方法。有没有什么简单的方法,或者我必须编写我的排序版本?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-11-11 19:04:17

使用numpy.argsort。它返回用于对数组进行排序的索引。

代码语言:javascript
复制
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]

如果特征值是复数,则the sort order is lexicographic (即,复数首先根据其实部进行排序,并按其虚部断开关系)。

票数 184
EN

Stack Overflow用户

发布于 2013-10-12 11:14:31

上面unutbu的回答非常简洁。但是,这是我们可以做的另一种方法,它更通用,也可以用于列表。

代码语言:javascript
复制
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是特征值,排序函数将根据该特征值对列表进行排序。

reverse = False用于升序。

票数 7
EN

Stack Overflow用户

发布于 2018-05-28 17:21:20

ubuntu的这段代码不能在我的Python 3.6.5上运行。它会导致运行时错误。因此,我将他/她的代码重构为在我的测试用例上运行良好的代码:

代码语言:javascript
复制
import numpy as np
from numpy import linalg as npla
#
def eigen(A):
    eigenValues, eigenVectors = npla.eig(A)
    idx = np.argsort(eigenValues)
    eigenValues = eigenValues[idx]
    eigenVectors = eigenVectors[:,idx]
    return (eigenValues, eigenVectors)
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8092920

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档