NumPyで行列式を求める方法 – linalg.det 関数の使い方

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
\]

計算例を確認する

たとえば以下の行列式は、次のように計算します。

\[
\left| \begin{array}{cc} 3 & 2 \\ 0 & 2 \end{array} \right|
=
3\cdot 2-2\cdot 0
=
6
\]

これは空間の面積が \(6\) 倍になることを示しています。

そして \(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}\]

計算例を確認する

たとえば以下の行列式は、このように計算します。

\[\begin{eqnarray}
\mathrm{det}A
=
\left| \begin{array}{ccc} 3 & 2 & 1\\ 1 & 2 & 1 \\ 2 & 2 & 2 \end{array} \right|
& = &
3 \cdot \left| \begin{array}{cc} 2 & 1 \\ 2 & 2 \end{array} \right|
-2 \cdot \left| \begin{array}{cc} 1 & 1 \\ 2 & 2 \end{array} \right|
+1 \cdot \left| \begin{array}{cc} 1 & 2 \\ 2 & 2 \end{array} \right| \\
&=&
3(2\cdot 2 -1 \cdot 2)-2(1 \cdot 2 -1 \cdot 2)+1(1 \cdot 2 -2 \cdot 2)\\
&=&
3(2)-2(0)+1(-2)\\
&=&4
\end{eqnarray}\]

これは空間の体積が \(4\) 倍になることを示しています。

\(4\times4\) 以上の行列式になると、さらに複雑になって、余因子展開というテクニックを駆使することになります。ご興味がある場合は「2×2, 3×3, 4×4 の行列式の計算方法[練習問題付き]」で解説していますので、ご確認ください。

2. linalg.det の使い方

numpy.linalg.det の書き方は以下の通りです。なお慣習的に、linalg モジュールは import numpy.linalg as LA とインポートします。そのため、このモジュール内の関数を使うときは LA.det() 書きます。

numpy.linalg.inv

書き方

LA.det(a)

パラメーター

引数 解説
a   array_like     行列式を求める行列を入力します。

公式ドキュメント:numpy.linalg.det

それではサンプルコードを確認していきましょう。

以下は2次行列の行列式を求めています。

In [1]:
import numpy as np
import numpy.linalg as LA
a=np.array([[1,2],[3,4]])
LA.det(a)
Out[1]:
-2.0 # 非常に小さな誤差が出る場合があります。

続いて3次行列の行列式です。

In [2]:
a=np.array([[1,-2,-3],[3,4,4],[0,1,0]])
LA.det(a)
Out[2]:
-13.0 # 非常に小さな誤差が出る場合があります。

どれだけ大きなサイズの行列であったとしても、あっという間に行列式を求めてくれます。

以下のような配列を渡すと複数の行列の行列式を返してくれます。

In [3]:
# 複数の行列の行列式を一度に計算する
a=np.array([[[1,2],[3,4]], [[-1,-4],[3,-4]], [[1,2],[-1,-2]]])
LA.det(a)
Out[3]:
array([-2., 16.,  0.])

なお行列式は、正方行列にのみ定義されているものです。そのため非正方行列を渡した場合はエラーになります。

3. まとめ

以上が numpy で行列式を求める方法です。



よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

目次
閉じる