【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超入門】使い方とサンプル集
Pythonの使い方について、基礎文法から応用例まで入門者向けに解説します。
【NumPy超入門】基本的な使い方〜応用例までサンプルコード付きで解説
Python用数値計算モジュール「NumPy」の使い方から応用例まで、サンプルコード付きで入門者向けにまとめました。

コメント