PythonのNumPyで複数の行列の逆行列を一度に計算する方法
Pythonで行列の(乗法)逆行列を計算するには、numpy.linalg.inv()メソッドを使用します。正方行列 a が与えられたとき、dot(a, ainv) = dot(ainv, a) = eye(a.shape[0]) を満たす行列 ainv を返します。このメソッドは、行列 a の乗法逆行列を結果として返し、第1引数 a には逆行列を求めたい行列を指定します。
特に便利なのは、3次元配列として複数の行列をまとめて渡すと、それぞれの行列に対して個別に逆行列を一括で計算できる点です。本記事では、その具体的な手順をサンプルコードとともに解説します。
手順
まず、必要なライブラリをインポートします。
import numpy as np from numpy.linalg import inv
array() を使って複数の行列を作成します。ここでは2つの2×2行列を1つの3次元配列に格納しています。
arr = np.array([[[1., 2.], [3., 4.]], [[1, 3], [3, 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.inv() メソッドを使って、各行列の(乗法)逆行列を計算します。
print("\nResult...\n",np.linalg.inv(arr))完全なサンプルコード
import numpy as np
from numpy.linalg import inv
# array() を使って複数の行列を作成
arr = np.array([[[1., 2.], [3., 4.]], [[1, 3], [3, 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.inv() メソッドで各行列の逆行列を計算
print("\nResult...\n",np.linalg.inv(arr))実行結果
Our Array... [[[1. 2.] [3. 4.]] [[1. 3.] [3. 5.]]] Dimensions of our Array... 3 Datatype of our Array object... float64 Shape of our Array object... (2, 2, 2) Result... [[[-2. 1. ] [ 1.5 -0.5 ]] [[-1.25 0.75] [ 0.75 -0.25]]]
ポイントまとめ
- numpy.linalg.inv() は、形状が (n, m, m) の3次元配列を受け取ると、先頭の軸に沿って格納された n 個の m×m 行列それぞれの逆行列を同時に計算します。
- 入力は正方行列である必要があり、特異行列(逆行列が存在しない行列)を渡すと LinAlgError が発生します。
- 結果の検証には、元の行列と逆行列の内積が単位行列になることを確認するとよいでしょう。
-
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 を指定すると上三角部分が使用されます。なお、この指定に関わらず、エルミート行列の性質を保つため、対角成分については実部のみが計算に使われ、虚部は常にゼロとして扱わ