固有値と特異値
code:p01.py
import numpy as np
import numpy.linalg as npal
固有値(Eigenvalue)
$ m\times m行列$ Aの固有値$ \lambda_i(A)は以下の式を満足する$ \lambdaとして求められる。
$ A\bm{v} = \lambda {\bm v}
code:(続き).py
A = np.array(1, 2],[3,2)
lam, V = npal.eig(A)
print('固有値:\n', lam)
print('固有ベクトル:\n', V)
l ... 固有値が格納されたリスト
V ... 固有ベクトルで構成された行列、直交行列である。$ \lambda_iに対応する固有ベクトル$ \bm v_iとすると、
$ V = \left[\begin{array}{cccc} {\bm v_1}, v_2, \ldots v_m \end{array}\right]
と、縦ベクトルとして並んで格納されている。
code:(続き).py
print('V行列の確認')
V1 = V:,0.reshape(2, 1) # <--- これ
l1 = lam0
print('A * v1 - lam1 * v1:', A @ V1 - l1 * V1)
V2 = V:,1.reshape(2, 1) # <--- これ
l2 = lam1
print('A * v2 - lam2 * v2:', A @ V2 - l2 * V2)
「<--- これ」の行では、スライスで抽出しただけでは1D-arrayになるので、これを2x1の2Darrayに変換し、$ Aとの行列積を求めている。
特異値(Singular Value)
$ m\times n行列$ Bの特異値$ \sigma_i (B)は、$ A^*A
$ \sigma(A) = \sqrt{\lambda_i(AA^*)}
ただし、$ A^*$ Aの随伴行列である。