numpy で逆行列を求めるときは、numpy.linalg.det
を使います。ここではこの関数の使い方についてわかりやすく解説していきます。また復習として、逆行列とは何かということも解説します。それでは始めましょう。
1. 行列式とは
最初に行列式について復習しておきましょう。これは、ある行列で線形変換したときの空間の拡張倍率です。2次元なら面積の倍数ですし、3次元なら体積の倍数です。ぜひ、以下のアニメーションでご確認ください。
なお、ある行列 \(A\) の行列式は \(\mathrm{det}A\) または \(|A|\) と表します。よりガッツリと復習したい方は『行列式とは?意味と定義・求め方・性質を徹底解説』で解説しているので、ぜひご確認ください。
なお、行列式の値は以下のように計算します。
\(2×2\) の行列式の公式
\[
\mathrm{det}A
=
\left| \begin{array}{cc} a & b \\ c & d \end{array} \right|
=ad-bc
\]
そして \(3×3\) の行列式は次のように計算します。
\(3×3\) の行列式の公式
\[\begin{eqnarray}
\mathrm{det}A
=
\left| \begin{array}{ccc} a & b & c\\ d & e & f \\ g & h & i \end{array} \right|
& = &
a \cdot \left| \begin{array}{cc} e & f \\ h & i \end{array} \right|
-b \cdot \left| \begin{array}{cc} d & f \\ g & i \end{array} \right|
+c \cdot \left| \begin{array}{cc} d & e \\ g & h \end{array} \right| \\
&=&
a(ei-fh)-b(di-fg)+c(dh-eg)
\end{eqnarray}\]
\(4\times4\) 以上の行列式になると、さらに複雑になって、余因子展開というテクニックを駆使することになります。ご興味がある場合は「2×2, 3×3, 4×4 の行列式の計算方法[練習問題付き]」で解説していますので、ご確認ください。
2. linalg.det の使い方
numpy.linalg.det
の書き方は以下の通りです。なお慣習的に、linalg
モジュールは import numpy.linalg as LA
とインポートします。そのため、このモジュール内の関数を使うときは LA.det()
書きます。
それではサンプルコードを確認していきましょう。
以下は2次行列の行列式を求めています。
import numpy as np
import numpy.linalg as LA
a=np.array([[1,2],[3,4]])
LA.det(a)
続いて3次行列の行列式です。
a=np.array([[1,-2,-3],[3,4,4],[0,1,0]])
LA.det(a)
どれだけ大きなサイズの行列であったとしても、あっという間に行列式を求めてくれます。
以下のような配列を渡すと複数の行列の行列式を返してくれます。
# 複数の行列の行列式を一度に計算する
a=np.array([[[1,2],[3,4]], [[-1,-4],[3,-4]], [[1,2],[-1,-2]]])
LA.det(a)
なお行列式は、正方行列にのみ定義されているものです。そのため非正方行列を渡した場合はエラーになります。
3. まとめ
以上が numpy で行列式を求める方法です。
コメント