列ベクトル形式の固有値がN個あります。したがって、これらの固有値に対応するN個の固有ベクトルがあり、固有ベクトル行列を形成します。
今、私が取り組んでいる問題では、固有値の列ベクトルを降順で並べ替える必要があります。対応を維持するために、固有ベクトル行列を固有値と同じ順序で並べ替えるにはどうすればよいですか?
列ベクトル形式の固有値がN個あります。したがって、これらの固有値に対応するN個の固有ベクトルがあり、固有ベクトル行列を形成します。
今、私が取り組んでいる問題では、固有値の列ベクトルを降順で並べ替える必要があります。対応を維持するために、固有ベクトル行列を固有値と同じ順序で並べ替えるにはどうすればよいですか?
例えば、
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]
使用できたはずです。s
{evals,evecs}
@acl と @yoda の並べ替え方法 (つまり、リスト要素をペアにして並べ替える) は簡単で一般的に使用されていますが、1 つの特定のリストに基づいて任意の数のリストを簡単に並べ替える別の一般的な方法を示したいと思います ( 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 *)
この関数を使用しSort
て、固有値に従って固有システムを並べ替えることができます。
mat = (#*Transpose@#) &@RandomReal[NormalDistribution[], {4, 4}];
eigsys = Sort@Transpose@Eigensystem[mat];
Sort
のデフォルトの動作は、最初の列でソートすることです。
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}}