【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行で求められます。ただし、エルミート性のチェックは行われないため、入力行列の条件については事前に確認しておくことが重要です。統計解析や機械学習における共分散行列の処理など、さまざまな場面で活用できる便利なメソッドなので、ぜひ使いこなしてみてください。
-
Python NumPyのnp.log2()で入力配列の底2の対数を計算する方法
PythonのNumPyで入力配列の各要素に対して底2の対数(log₂)を求めるには、numpy.log2()メソッドを使用します。このメソッドは引数xの底2の対数を返します。xがスカラーの場合、戻り値もスカラーになります。numpy.log2()の主なパラメータ第1パラメータ:x — 入力値を指定します。配列のようなオブジェクト(array-like)を受け付けます。第2パラメータ:out — 計算結果を格納する場所を指定します。指定する場合は、入力がブロードキャストされる形状と一致している必要があります。省略した場合やNoneを指定した場合は、新しく確保された配列が返されます。タプルで指定
-
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...\