この記事では、Python言語とNumPyを用いて、行列のコレスキー分解を求める方法をソースコード付きで解説します。
コレスキー分解
コレスキー分解(cholesky)とは、線形代数において行列を分解する手法の1つです。
LU分解の発展版(高速に分解できる)で、元となる行列Aが正定値対称行列のとき、次のように分解します。
(1)
このとき、Lは下三角行列となります。
対角行列Dを挟んで、次のように分解することもあります。(LDL分解)
(2)
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」の使い方から応用例まで、サンプルコード付きで入門者向けにまとめました。
コメント