Pythonで行列の逆行列を計算する方法:numpy.linalg.inv()の使い方
Pythonで行列の(乗法)逆行列を計算するには、numpy.linalg.inv()メソッドを使用します。このメソッドに正方行列 a を渡すと、dot(a, ainv) = dot(ainv, a) = eye(a.shape[0]) を満たす行列 ainv、つまり元の行列と掛け合わせると単位行列になる行列が返されます。第1引数の a には、逆行列を求めたい対象の行列を指定します。
手順
まず、必要なライブラリをインポートします。
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(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(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]]
補足:逆行列について
逆行列とは、ある正方行列 A に対して A × A⁻¹ = I(単位行列)を満たす行列のことです。ただし、すべての行列に逆行列が存在するわけではなく、行列式(determinant)が0になる行列は「特異行列」と呼ばれ、逆行列を持ちません。そのような場合、numpy.linalg.inv()は LinAlgError を発生させるので注意が必要です。また、数値誤差の影響を受けやすい状況では、numpy.linalg.pinv()(擬似逆行列)を使う方法もあります。
-
Pythonでフロベニウスノルムを使って線形代数における行列の条件数を計算する方法
線形代数において行列の条件数(条件数)を計算するには、Pythonの numpy.linalg.cond() メソッドを使用します。このメソッドは、引数 p の値に応じて7種類の異なるノルムから選択して条件数を返すことができます。返される値は行列の条件数であり、無限大になる場合もあります。行列 x の条件数は、「x のノルム × x の逆行列のノルム」として定義されます。ここで使用するノルムは、一般的なL2ノルムのほか、さまざまな行列ノルムの中から選択できます。第1引数の x は、条件数を求めたい対象となる行列です。第2引数の p は、条件数の計算に使用するノルムの種類(次数)を指定します。パ
-
Pythonで複素エルミート行列・実対称行列の固有値を求める方法(numpy.eigvalsh)
Pythonで複素エルミート行列や実対称行列の固有値を計算したい場合は、NumPyの numpy.eigvalsh() メソッドを使うのが便利です。このメソッドは、固有値を昇順で返し、重複度に応じて同じ固有値を繰り返し出力します。主な引数は以下の通りです。第1引数 a: 固有値を計算したい複素数または実数の行列を指定します。第2引数 UPLO: 行列のどちらの三角部分を使って計算するかを指定します。デフォルトは L(下三角部分)、U を指定すると上三角部分が使用されます。なお、この指定に関わらず、エルミート行列の性質を保つため、対角成分については実部のみが計算に使われ、虚部は常にゼロとして扱わ