【Python】NumPyのlinalg.inv()で行列オブジェクトの逆行列を計算する方法
Pythonで行列オブジェクトの逆行列(乗法逆元)を求めるには、NumPyの numpy.linalg.inv() メソッドを使用します。この関数は、正方行列 a が与えられたとき、dot(a, ainv) = dot(ainv, a) = eye(a.shape[0]) を満たす行列 ainv(逆行列)を返します。
numpy.linalg.inv() の第1引数 a には、逆行列を求めたい対象となる行列を指定します。戻り値は、その行列 a の乗法逆行列です。
逆行列とは
n次の正方行列 A に対して、「A × A⁻¹ = A⁻¹ × A = 単位行列 E」を満たす行列 A⁻¹ を逆行列と呼びます。ただし、すべての行列に逆行列が存在するわけではなく、行列式(determinant)が 0 でない正方行列(正則行列)のみが逆行列を持ちます。
手順
まず、必要なライブラリをインポートします。
import numpy as np from numpy.linalg import inv
次に、配列を作成します。
arr = np.array([[ 5, 10], [ 15, 20 ]])
作成した配列を表示します。
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)
そして、numpy.linalg.inv() メソッドを使って、matrix() で生成した行列オブジェクトの逆行列を計算します。
print("\nResult...\n",np.linalg.inv(np.matrix(arr)))
完全なサンプルコード
import numpy as np
from numpy.linalg import inv
# 配列を作成する
arr = np.array([[ 5, 10], [ 15, 20 ]])
# 配列を表示する
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.inv()メソッドを使って行列オブジェクトの逆行列を計算する
print("\nResult...\n",np.linalg.inv(np.matrix(arr)))
実行結果
Our Array... [[ 5 10] [15 20]] Dimensions of our Array... 2 Datatype of our Array object... int64 Shape of our Array object... (2, 2) Result... [[-0.4 0.2] [ 0.3 -0.1]]
注意点
逆行列を計算する際には、以下の点に注意してください。
- 対象となる行列は正方行列(行数と列数が同じ)である必要があります。
- 行列式が 0 の行列(特異行列)は逆行列を持たないため、
LinAlgErrorが発生します。 np.matrixクラスは現在ではレガシーな存在とされており、公式ドキュメントでも通常のndarrayの使用が推奨されています。np.linalg.inv()はndarrayに対してもそのまま使用できるため、特別な理由がない限りndarray+inv()の組み合わせで問題ありません。
-
PythonのNumPyで2ノルムを使って行列の条件数を計算する方法
線形代数における行列の条件数(コンディションナンバー)を計算するには、Pythonの numpy.linalg.cond() メソッドを使用します。このメソッドは、引数 p の値に応じて7種類の異なるノルムから選択して条件数を返すことができます。返される値は無限大になる場合もあります。行列 x の条件数は、「x のノルム × x の逆行列のノルム」として定義されます。ここで使うノルムは、通常のL2ノルムやその他さまざまな行列ノルムを選べます。第1引数の x は、条件数を求めたい対象の行列です。第2引数の p は、条件数の計算に使用するノルムの次数を指定します。「2」を指定した場合は2ノルムが使
-
Pythonで複素エルミート行列・実対称行列の固有値を求める方法(numpy.eigvalsh)
Pythonで複素エルミート行列や実対称行列の固有値を計算したい場合は、NumPyの numpy.eigvalsh() メソッドを使うのが便利です。このメソッドは、固有値を昇順で返し、重複度に応じて同じ固有値を繰り返し出力します。主な引数は以下の通りです。第1引数 a: 固有値を計算したい複素数または実数の行列を指定します。第2引数 UPLO: 行列のどちらの三角部分を使って計算するかを指定します。デフォルトは L(下三角部分)、U を指定すると上三角部分が使用されます。なお、この指定に関わらず、エルミート行列の性質を保つため、対角成分については実部のみが計算に使われ、虚部は常にゼロとして扱わ