この記事では、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]]
コメント