Pythonのnumpy.linalg.cond()で負の2ノルムを使って行列の条件数を計算する方法
線形代数において行列の条件数を計算するには、Pythonの numpy.linalg.cond() メソッドを使用します。このメソッドは、引数 p の値に応じて7種類のノルムの中から適切なものを選択し、そのノルムに基づく条件数を返します。なお、計算結果は無限大になる場合もある点に注意してください。
条件数とは?
行列 x の条件数は、「x のノルム × x の逆行列のノルム」として定義されます。ここで使用するノルムは、一般的なL2ノルムのほか、複数の行列ノルムから選ぶことができます。
- 第1引数 x: 条件数を求めたい対象となる行列を指定します。
- 第2引数 p: 条件数の計算に使用するノルムの次数を指定します。p に「-2」を設定すると、負の2ノルム(最小特異値)が使用されます。
実装手順
1. 必要なライブラリをインポートする
まず、NumPyと線形代数モジュールをインポートします。
import numpy as np from numpy import linalg as LA
2. 配列を作成する
条件数を計算する対象となる行列を作成します。
arr = np.array([[ 1, 1, 0], [1, 0, 1], [1, 0, 0]])
3. 配列の情報を確認する
作成した配列の中身や、次元数・データ型・形状を確認しておきましょう。
# 配列を表示
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)
4. 条件数を計算する
numpy.linalg.cond() メソッドを使って条件数を計算します。第2引数に「-2」を渡すことで、負の2ノルム(最小特異値)に基づく条件数が得られます。
print("\nResult...\n",LA.cond(arr, -2))
完全なコード例
import numpy as np
from numpy import linalg as LA
# 配列を作成
arr = np.array([[ 1, 1, 0], [1, 0, 1], [1, 0, 0]])
# 配列を表示
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)
# 負の2ノルムを使用して行列の条件数を計算
print("\nResult...\n",LA.cond(arr, -2))
出力結果
Our Array... [[1 1 0] [1 0 1] [1 0 0]] Dimensions of our Array... 2 Datatype of our Array object... int64 Shape of our Array object... (3, 3) Result... 0.2679491924311227
結果の解釈
この例では、条件数として約 0.2679 という値が得られました。p = -2 を指定した場合、結果は「最大特異値に対する最小特異値の比」、つまり通常の2ノルム条件数の逆数に相当します。したがって、この値が1に近いほど行列が良好な条件(数値的に安定)であることを示し、0に近いほど条件数が大きい=悪条件であることを意味します。数値計算の精度評価や連立方程式の安定性解析などに活用するとよいでしょう。
-
Python NumPyのlinalg.norm()で行列・ベクトルのノルムを計算する方法
線形代数において行列またはベクトルのノルム(Norm)を返すには、Python NumPyのnumpy.linalg.norm()メソッドを使用します。この記事では、LA.norm()メソッドの基本的な使い方と各パラメータの意味を、実際のコード例とともにわかりやすく解説します。numpy.linalg.norm()メソッドのパラメータ第1引数:xノルムを計算する対象となる入力配列です。axisがNoneの場合、xは1次元または2次元である必要があります(ordがNoneの場合を除く)。axisとordがどちらもNoneの場合は、x.ravel()の2-ノルムが返されます。第2引数:ordノルム
-
【Python入門】numpy.linalg.cholesky()でコレスキー分解を求める方法
線形代数におけるコレスキー分解(Cholesky decomposition)とは、エルミート行列かつ正定値である正方行列 a を、下三角行列 L とその共役転置 LH の積「L * LH」に分解する手法です。NumPyでは numpy.linalg.cholesky() メソッドを使うことで、この分解を簡単に求めることができます。numpy.linalg.cholesky()メソッドの概要numpy.linalg.cholesky() は、引数として渡された正方行列のコレスキー分解を計算し、下三角行列 L を返します。このメソッドには以下のような特徴があります。前提条件: 入力行列 a はエ