【NumPy】行列のコレスキー分解 linalg.cholesky

この記事では、Python言語とNumPyを用いて、行列のコレスキー分解を求める方法をソースコード付きで解説します。

スポンサーリンク

コレスキー分解

コレスキー分解(cholesky)とは、線形代数において行列を分解する手法の1つです。
LU分解の発展版(高速に分解できる)で、元となる行列Aが正定値対称行列のとき、次のように分解します。

(1)   \begin{eqnarray*} A=LL^T \end{eqnarray*}

このとき、Lは下三角行列となります。
対角行列Dを挟んで、次のように分解することもあります。(LDL分解)

(2)   \begin{eqnarray*} A=LDL^T \end{eqnarray*}

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

書式

L = numpy.linalg.cholesky(A)

第1引数(A):正定値対称行列
戻り値(L):コレスキー分解により行列Aを分解して得られた下三角行列

スポンサーリンク

ソースコード

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

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

def main():

    A = np.array([[2.,0.]    # 行列Aの生成
                 ,[0.,5.]])
    L = np.linalg.cholesky(A)      # 行列AをQR分解
    # 結果を表示
    print("A=\n", A)
    print("L=\n", L)
    print("L*L^T=\n", L.dot(L.T))

if __name__ == '__main__':
    main()
スポンサーリンク

実行結果

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

A=
[[ 2.  0.]
 [ 0.  5.]]

L=
[[ 1.41421356  0.        ]
 [ 0.          2.23606798]]

L*L^T=
[[ 2.  0.]
 [ 0.  5.]]

行列AとL*L^Tの積が一致していることから、コレスキー分解できていることがわかります。

おすすめ記事

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

コメント