用特征向量矩阵对特征值矩阵进行排序

时间:2011-07-05 21:19:49

标签: sorting wolfram-mathematica eigenvector eigenvalue

我有列矢量形式的N个特征值。 因此,存在与这些特征值对应的N个本征向量,形成特征向量矩阵。

现在,我正在处理的问题要求我按降序对特征值列向量进行排序。如何按照与特征值相同的顺序对特征向量矩阵进行排序以保持对应?

4 个答案:

答案 0 :(得分:10)

例如,

m = RandomReal[{0, 1}, {5, 5}];
{evals, evecs} = Eigensystem[m];
SortBy[Transpose[{evals, evecs}], First]

或者如果您希望它们采用相同的形式,请用

替换最后一行
Transpose@SortBy[Transpose[{evals, evecs}], First]

编辑:虽然我使用了{evals,evecs}=Eigensystem[m],但这不是必需的。我可以使用s=Eigensystem[m],然后在s的任何地方使用{evals,evecs}

答案 1 :(得分:8)

虽然@acl和@ yoda的排序方式(即配对列表元素然后排序在一起)很容易且常用,我想展示另一种通用方法,可以根据一个特定列表轻松排序任意数量的列表(list1):

oo = Ordering[list1]; (* this finds the sorting order of list1 *)
list1[[oo]]
list2[[oo]]
list3[[oo]]  (* these order some other lists in the same way *)

答案 2 :(得分:1)

您可以使用Sort函数根据特征值对特征系统进行排序。

mat = (#*Transpose@#) &@RandomReal[NormalDistribution[], {4, 4}];
eigsys = Sort@Transpose@Eigensystem[mat];

Sort的默认行为是按第一列排序。

答案 3 :(得分:0)

  

使用Mathematica:

matrix = RandomReal[{0, 1}, {4, 4}];
{evals, evecs} = Chop[Transpose[Sort[Transpose[Eigensystem[matrix]]]]];
  

输出:

evals
{-0.296769, 0.187003, 0.52714, 2.00376}

evecs 
{{-0.412673,0.844056,-0.0718614,-0.334823}, 
{-0.370973,  -0.472126, 0.76248, 0.241042},
{-0.253163,  0.1719,  -0.786782, 0.536034},
{0.557741,  0.381364,  0.65039, 0.347102}}