【问题标题】:Sort eigenvalue matrix with eigenvector matrix用特征向量矩阵对特征值矩阵进行排序
【发布时间】:2011-09-29 03:52:13
【问题描述】:

我有 N 个列向量形式的特征值。 这样就有N个特征向量对应这些特征值,形成一个特征向量矩阵。

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

【问题讨论】:

  • 请注意,在 Mathematica 中使用机器编号时,Eigensystem 已经返回按降序排序的特征值/向量。
  • Eigensystem 将返回特征值和特征向量,后者按与前者对应的顺序返回。丹尼尔·利希特布劳
  • 我确实想指出一件事,对于数值矩阵的退化特征向量(即相同的特征值),EigenvectorsEigensystem 返回的向量是线性独立的,而不是正交的。这不止一次地咬了我。但是,你可以在退化集上使用Orthogonalize 来给你一个正交集。
  • @rcollyer,刚刚检查过,你是对的!我不知道这个...
  • @Szabolcs,是的,没有什么比依靠它们的正交性更重要的了。而且,你是对的,你可以直接在整个集合上使用Orthogonalize,因为它不会影响不同子空间的正交性。

标签: sorting wolfram-mathematica eigenvector eigenvalue


【解决方案1】:

例如,

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],然后在我目前拥有{evals,evecs}的任何地方使用s

【讨论】:

  • 哦,你打败了我;)我会删除我的答案
  • 先生,您是学者和冠军。
【解决方案2】:

虽然@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 *)

【讨论】:

    【解决方案3】:

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

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

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

    【讨论】:

    • 我不确定;这是我观察到的,在玩了几个测试用例之后,我很满意,我一直用它来按第一列排序......我倾向于这样做,直到出现可怕的错误,这就是我去阅读文档的时候: )
    • 我的印象是,在排序列表中,它实现了词法排序,即{1,0,3}{1,0,4} 之前。因此,粗略检查一下,它似乎是按第一列排序,实际上是按所有列排序。
    • @rcollyer,它确实做了字典排序
    【解决方案4】:

    使用 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}}
    

    【讨论】:

      猜你喜欢
      • 2019-04-27
      • 2012-08-08
      • 2018-10-31
      • 1970-01-01
      • 2012-03-18
      • 2018-10-12
      • 1970-01-01
      • 2017-09-27
      • 1970-01-01
      相关资源
      最近更新 更多