【NumPy】特異値分解(SVD) linalg.svd

この記事では、Python言語とNumPyを用いて、行列の固有値・固有ベクトルを求める方法をソースコード付きで解説します。

特異値分解(SVD)

特異値分解(SVD)とは、線形代数において行列を分解する手法の1つです。
統計学やロボット工学などの広い分野で用いられています。
特異値分解は、正方行列に限らず任意の形の行列を分解することができます。

NumPyのlinalg.svdを利用すると、簡単に特異値分解することが出来ます。

書式

U, S, V = np.linalg.svd(A)

第1引数(A):任意の行列A
戻り値(U, S, V):特異値分解により行列Aを分解して得られた行列

ソースコード

サンプルプログラムのソースコードです。

# -*- coding: utf-8 -*-
import numpy as np
import matplotlib.pyplot as plt

def main():

    A = np.random.rand(2, 2)    # 2*2の行列Aを生成
    U, S, V = np.linalg.svd(A)  # 行列Aを特異値分解
    # 結果を表示
    print("U=\n"+str(U))
    print("S=\n"+str(S))
    print("V=\n"+str(V))

if __name__ == '__main__':
    main()

実行結果

サンプルプログラムの実行結果です。

U=
[[-0.49367214 -0.8696481 ]
 [-0.8696481   0.49367214]]

S=
[ 1.45559442  0.40914038]

V=
[[-0.78579514 -0.61848686]
 [-0.61848686  0.78579514]]

おすすめ記事

Python入門 サンプル集
NumPy入門 サンプル集

コメント