まずは手計算で求める
今回は行列
行列の固有値をとすると、
ここで、
固有ベクトルはを満たすので、正規化(長さを1に調整)すると
- のときは
- のときは
と求まる。
Numpyを利用して求める
value, vector = np.linalg.eig(A)
とすることで行列Aの固有値がvalueに、固有ベクトルがvectorに格納される。
実際に先ほどの行列Aを計算するために以下のプログラムを動かしてみる
import numpy as np #行列の定義 A = np.array([[2, 1], [0, -1]]) #固有値と固有ベクトルを計算 value, vect = np.linalg.eig(A) #表示 print(f'value = {value}') print(f'vect\n{vect}')
すると、実行結果は次のようになり
となることが分かる。
実行結果
value = [ 2. -1.] vect [[ 1. -0.31622777] [ 0. 0.9486833 ]]
おまけ(固有値最大の固有値ベクトルを求める)
ページランクなどで固有値最大の固有ベクトルを計算する場合などは次のようにすればよいです。
import numpy as np #行列の定義 A = np.array([[2, 1], [0, -1]]) #固有値と固有ベクトルを計算 value, vect = np.linalg.eig(A) #固有値最大の固有値ベクトルを表示 print(vect[:,value.argmax()])
実行結果
[1. 0.]