この記事では、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についてPythonは、統計処理や機械学習、ディープラーニングといった数値計算分野を中心に幅広い用途で利用されているプログラミング言語です。他のプログラミング言語と比較して「コードが短くて読みやすい、書きやすい」「ライブラリが豊...

【NumPy超入門】使い方とサンプルコードを解説
Pythonライブラリ「NumPy」の使い方から応用例まで、サンプルコード付きで入門者向けにまとめました。

コメント