【NumPy】行列のQR分解 linalg.qr

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

おすすめ記事

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

コメント