5

linalg.eig(A)を使用して、行列の固有値と固有ベクトルを取得しています。これらの固有値(および関連するベクトル)を順番に並べ替える簡単な方法はありますか?

4

2 に答える 2

7

sort()NumPyとargsort()関数を使用したい。argsort()配列の並べ替えに必要なインデックスの順列を返すため、固有値の大きさで並べ替える場合(NumPy配列の標準の並べ替えは最小から最大のようです)、次のように実行できます。

import numpy as np

A = np.asarray([[1,2,3],[4,5,6],[7,8,9]])
eig_vals, eig_vecs = np.linalg.eig(A)

eig_vals_sorted = np.sort(eig_vals)
eig_vecs_sorted = eig_vecs[:, eig_vals.argsort()]


# Alternatively, to avoid making new arrays
# do this:

sort_perm = eig_vals.argsort()

eig_vals.sort()     # <-- This sorts the list in place.
eig_vecs = eig_vecs[:, sort_perm]
于 2012-04-10T06:09:02.393 に答える
-3

np.linalg.eig多くの場合、複素数値を返します。の使用を検討することをお勧めしnp.sort_complex(eig_vals)ます。

于 2016-09-07T04:06:40.100 に答える