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

Bon*_*onk 3 sorting wolfram-mathematica eigenvalue eigenvector

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

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

acl*_*acl 10

例如,

m = RandomReal[{0, 1}, {5, 5}];
{evals, evecs} = Eigensystem[m];
SortBy[Transpose[{evals, evecs}], First]
Run Code Online (Sandbox Code Playgroud)

或者如果您希望它们采用相同的形式,请将最后一行替换为

Transpose@SortBy[Transpose[{evals, evecs}], First]
Run Code Online (Sandbox Code Playgroud)

编辑:虽然我用过{evals,evecs}=Eigensystem[m],但没有必要.我可以使用s=Eigensystem[m],然后s在我现在的任何地方使用{evals,evecs}.

  • 先生,你是学者和冠军. (2认同)

Sza*_*lcs 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 *)
Run Code Online (Sandbox Code Playgroud)