Python
 Computer >> コンピューター >  >> プログラミング >> Python

【Python入門】numpy.linalg.cholesky()でコレスキー分解を求める方法

線形代数におけるコレスキー分解(Cholesky decomposition)とは、エルミート行列かつ正定値である正方行列 a を、下三角行列 L とその共役転置 LH の積「L * LH」に分解する手法です。NumPyでは numpy.linalg.cholesky() メソッドを使うことで、この分解を簡単に求めることができます。

numpy.linalg.cholesky()メソッドの概要

numpy.linalg.cholesky() は、引数として渡された正方行列のコレスキー分解を計算し、下三角行列 L を返します。このメソッドには以下のような特徴があります。

  • 前提条件: 入力行列 a はエルミート行列(すべての要素が実数の場合は対称行列)であり、かつ正定値である必要があります。
  • チェックなし: 行列が本当にエルミートであるかどうかの検証は行われません。
  • 使用される要素: 行列の下三角部分と対角成分のみが計算に使われます。
  • 戻り値: 実際に返されるのは下三角行列 L のみです。また、a が matrix オブジェクトの場合は matrix オブジェクトが返されます。

コレスキー分解を求める手順

まず、必要なライブラリをインポートします。

import numpy as np

numpy.array() メソッドを使って2次元のNumPy配列を作成します。ここでは複素数を含むエルミート行列を用意しました。

arr = np.array([[1,-2j],[2j,5]])

作成した配列を表示して確認しましょう。

print("Our Array...\n",arr)

配列の次元数を確認します。

print("\nDimensions of our Array...\n",arr.ndim)

配列オブジェクトのデータ型を確認します。

print("\nDatatype of our Array object...\n",arr.dtype)

配列の形状(shape)を確認します。

print("\nShape of our Array object...\n",arr.shape)

最後に、np.linalg.cholesky() メソッドを呼び出してコレスキー分解を実行します。

print("\nCholesky decomposition in Linear Algebra...\n",np.linalg.cholesky(arr))

完全なサンプルコード

ここまでの手順をまとめた完全なコード例は以下の通りです。

import numpy as np

# numpy.array()メソッドで2次元配列を作成
arr = np.array([[1,-2j],[2j,5]])

# 配列を表示
print("Our Array...\n",arr)

# 次元数を確認
print("\nDimensions of our Array...\n",arr.ndim)

# データ型を確認
print("\nDatatype of our Array object...\n",arr.dtype)

# 形状を確認
print("\nShape of our Array object...\n",arr.shape)

# numpy.linalg.cholesky()メソッドでコレスキー分解を求める
print("\nCholesky decomposition in Linear Algebra...\n",np.linalg.cholesky(arr))

実行結果

上記のコードを実行すると、以下の出力が得られます。

Our Array...
[[ 1.+0.j -0.-2.j]
[ 0.+2.j 5.+0.j]]

Dimensions of our Array...
2

Datatype of our Array object...
complex128

Shape of our Array object...
(2, 2)

Cholesky decomposition in Linear Algebra...
[[1.+0.j 0.+0.j]
[0.+2.j 1.+0.j]]

出力を見ると、元の複素数行列から下三角行列 L が正しく求められていることがわかります。この L とその共役転置を掛け合わせると、元の行列 a が復元されます。

まとめ

numpy.linalg.cholesky() を使えば、エルミートかつ正定値な行列のコレスキー分解を1行で求められます。ただし、エルミート性のチェックは行われないため、入力行列の条件については事前に確認しておくことが重要です。統計解析や機械学習における共分散行列の処理など、さまざまな場面で活用できる便利なメソッドなので、ぜひ使いこなしてみてください。

  1. Python NumPyのnp.log2()で入力配列の底2の対数を計算する方法

    PythonのNumPyで入力配列の各要素に対して底2の対数(log₂)を求めるには、numpy.log2()メソッドを使用します。このメソッドは引数xの底2の対数を返します。xがスカラーの場合、戻り値もスカラーになります。numpy.log2()の主なパラメータ第1パラメータ:x — 入力値を指定します。配列のようなオブジェクト(array-like)を受け付けます。第2パラメータ:out — 計算結果を格納する場所を指定します。指定する場合は、入力がブロードキャストされる形状と一致している必要があります。省略した場合やNoneを指定した場合は、新しく確保された配列が返されます。タプルで指定

  2. Python・NumPyで文字列配列の各要素の長さを取得する方法

    文字列配列の各要素の長さを要素ごとに取得したい場合は、PythonのNumPyが提供する numpy.char.str_len() メソッドを使用します。このメソッドは、各文字列の長さを格納した整数型の出力配列を返します。実行手順まず、必要なライブラリをインポートします。import numpy as np次に、1次元の文字列配列を作成します。arr = np.array([Amy, Scarlett, Katie, Brad, Tom])作成した配列を表示してみましょう。print(Array...\n,arr)配列のデータ型を確認します。print(\nArray datatype...\