排序特徵值矩陣我在列向量形式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