排序特征值矩阵我在列向量形式n个特征值。因此,存在与这些特征值对应的N个特征向量,形成特征向量矩阵。现在与特征向量矩阵
,我的工作问题需要我的特征值列向量进行降序排列。我如何排列特征向量与特征值相同的顺序以保持对应?
排序特征值矩阵我在列向量形式n个特征值。因此,存在与这些特征值对应的N个特征向量,形成特征向量矩阵。现在与特征向量矩阵
,我的工作问题需要我的特征值列向量进行降序排列。我如何排列特征向量与特征值相同的顺序以保持对应?
例如,
m = RandomReal[{0, 1}, {5, 5}];
{evals, evecs} = Eigensystem[m];
SortBy[Transpose[{evals, evecs}], First]
,或者如果你希望他们以相同的形式,通过
[email protected][Transpose[{evals, evecs}], First]
编辑替换最后一行:当我用{evals,evecs}=Eigensystem[m]
,这是没有必要的。我只能使用s=Eigensystem[m]
,然后在我目前有{evals,evecs}
的地方使用s
。
可以使用Sort
功能根据特征值特征系统进行排序。
mat = (#*[email protected]#) &@RandomReal[NormalDistribution[], {4, 4}];
eigsys = [email protected]@Eigensystem[mat];
Sort
的默认行为是按第一列排序。
虽然排序@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 *)
注意当机器号码Mathematica的使用,'Eigensystem'已经返回降序排列特征值/向量。 – Szabolcs
Eigensystem将返回特征值和特征向量与后者相对应的前者。丹尼尔Lichtblau –
我确实想指出一点,对于一个数值矩阵,所述简并本征矢量(即相同的特征值)'Eigenvectors'并且是线性独立的,不正交'Eigensystem'返回向量。这比我多一次。但是,你可以在退化集上使用'Orthogonalize'来给你一个正交集。 – rcollyer