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 で行列式を求める方法です。

Python初心者におすすめのプログラミングスクール

「未経験からでもPythonを学べるプログラミングスクールを探しているけど、色々ありすぎてわからない」なら、次の3つのプログラミングスクールから選んでおけば間違いはありません。

Aidemy Premium:全くの初心者ができるだけ効率よく短期間で実務的に活躍できるAI人材になることを目的とした講座。キャリアカウンセリングや転職エージェントの紹介などの転職支援も充実しており、受講者の転職成功率が高い。

AIジョブカレPythonの基本をおさえた人が、実際に機械学習やディープラーニングを活用できるようになるための講座。転職補償型があるなどキャリア支援の内容が非常に手厚く、講師の質も最高クラス。コスパ最高。Python初心者用の対策講座もある。

データミックスプログラミング経験者のビジネスマンが、更なるキャリアアップのためにデータの処理方法を学んでデータサイエンティストになるための講座。転職だけでなく起業やフリーランスとして独立する人も多い。Python初心者用の対策講座もある。

特に、あなたが以下のような目標を持っているなら、この中から選んでおけば間違いはないでしょう。

・未経験からPythonエンジニアとして就職・転職したい
・AIエンジニアやデータサイエンティストとしてキャリアアップしたい
・起業やフリーランスを視野に入れたい

理由は「Python初心者のためのおすすめプログラミングスクール3選」で解説しています。



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

この記事を書いた人

コメント

コメントする

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

目次
閉じる