特異値分解 with Python

特異値分解

$$
\Large
M = U \Sigma V ^ { * }
$$

\(U\):m次ユニタリ行列

左特異行列と
随伴行列が逆行列となる行列で、固有値の絶対値、特異値、行列式の絶対値が1となる。

wiki:ユニタリ行列

\(\sum{}\):\(m\)行\(n\)列行列

特異値行列
\(\sum{}\):対角成分が特異値の\(m\)行\(n\)列行列
\(\sigma_p\)は、特異値です。
m=nの場合は、下のような対角行列になります。
$$
\sum{} =
\left( \begin{array} { c c c c } { \sigma _ { 1 } } & { } & { } & { 0 } \\ { } & { \sigma _ { 2 } } & { } & { } \\ { } & { } & { \ddots } & { } \\ { 0 } & { } & { } & { \sigma _ { p } } \end{array} \right)
$$

それ以外は次のような場合分けになります。

wiki/特異値分解

\(V\):n次随伴行列

右特異行列

ユニタリ行列の転置行列かつ、複素共役をとった行列

wiki/随伴行列

Pythonで特異値分解

Pythonで特異値分解するにはnumpyのlinalg.svd()を使用する。

import numpy as np

np.linalg.svd()

プログラム

import numpy as np
A = np.array([[1,2],[3,4]])

#特異値分解
U, s, V = np.linalg.svd(A, full_matrices=True)

s = np.diag(s)

#確認
print("U = \n", U)
print("s = \n", s)
print("V = \n", V)

#A = UsV
UsV = np.dot(np.dot(U, s), V)
print("A = \n", A)
print("UsV = \n", UsV)

結果

\(A = UsV\)となっていることが確認できる。

参考

おすすめ