用特征向量矩阵排序特征值矩阵

6
我有一个包含N个特征值的列向量。 因此,有N个对应于这些特征值的特征向量,形成一个特征向量矩阵。
现在,我正在处理的问题需要我将特征值列向量按降序排序。如何将特征向量矩阵按相同顺序排序以保持对应关系?

请注意,在Mathematica中使用机器数时,Eigensystem已经按降序返回了特征值/向量。 - Szabolcs
Eigensystem会返回特征值和特征向量,后者的顺序与前者对应。——Daniel Lichtblau - Daniel Lichtblau
5
我想指出一件事,对于数值矩阵的退化特征向量(即具有相同特征值的向量),EigenvectorsEigensystem返回的向量是线性独立的,而不是正交的。这一点曾经让我吃过亏。但是,你可以在退化集合上使用Orthogonalize来得到一个正交集合。 - rcollyer
@rcollyer,刚刚检查了一下,你是对的!我不知道这个... - Szabolcs
@rcollyer,我认为在正交化之前不需要将退化集合分开,一个简单的Orthogonolize@Eigenvalues[m]就可以了。至少对于使用Gram-Schmidt的情况是这样的。有人能确认一下吗? - Szabolcs
2
@Szabolcs,没什么比在它们不正交时依赖它们的正交性更糟糕的了。而且,你是对的,你可以直接在整个集合上使用Orthogonalize,因为它不会影响不同子空间的正交性。 - rcollyer
4个回答

13
例如,
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


哦,你比我快了;)我会删除我的答案。 - Thies Heidecke
2
您,先生,是一位学者和冠军。 - Bonk

9

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

1

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

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

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


我不确定,这是我观察到的一些东西,在玩弄了几个测试用例后,我感到满意,而且我一直在使用它来按第一列排序... 我倾向于这样做,直到出现可怕的错误时,我才去阅读文档 :) - user616736
我曾经认为在对列表进行排序时,它实现了词法排序,即 {1,0,3}{1,0,4} 之前。因此,在粗略检查时,它似乎是按第一列排序,但实际上它是按所有列排序的。 - rcollyer
@rcollyer,它确实进行了词典排序。 - Szabolcs

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接