この記事では、Python言語とNumPyを用いて、行列の固有値・固有ベクトルを求める方法をソースコード付きで解説します。
QR分解
QR分解とは、線形代数において行列を直交行列Qと、上三角行列Rの積に分解する手法です。
【詳細】
・QR分解とは(アルゴリズムと例、固有値)
線型最小二乗問題や固有値問題を解く時に利用されます。
QR分解を計算する手法としては、ギブンス回転、ハウスホルダー変換、グラム・シュミット分解などがあります。
NumPyのlinalg.qrを利用すると、簡単に特異値分解することが出来ます。
書式
Q, R = numpy.linalg.qr(A)
第1引数(A):任意の行列A
戻り値(Q, R):QR分解により行列Aを分解して得られた直交行列Qと、上三角行列R
ソースコード
サンプルプログラムのソースコードです。
# -*- coding: utf-8 -*- import numpy as np import matplotlib.pyplot as plt def main(): A = np.random.rand(2, 2) # 2*2の行列Aを生成 Q, R = np.linalg.qr(A) # 行列AをQR分解 # 結果を表示 print("A=\n"+str(A)) print("Q=\n"+str(Q)) print("R=\n"+str(R)) print("Q*R=\n"+str(Q.dot(R))) if __name__ == '__main__': main()
実行結果
サンプルプログラムの実行結果です。
A= [[ 0.21988645 0.45231549] [ 0.17618505 0.11629304]] Q= [[-0.78039095 -0.62529191] [-0.62529191 0.78039095]] R= [[-0.28176448 -0.42570001] [ 0. -0.19207518]] Q*R= [[ 0.21988645 0.45231549] [ 0.17618505 0.11629304]]
コメント