Python入門トップページ


目次

  1. NumPy とは
  2. Python リストの場合
  3. NumPy の使用例
  4. NumPy で線形代数
    1. 行列式
    2. 単位行列
    3. 逆行列
    4. 行列の階数
    5. 固有値
    6. 固有値の応用例:PageRank
    7. ノルム(L1ノルムとL2ノルム)
  5. NumPy の乱数生成

NumPy

NumPy で線形代数

線形代数で用いられる行列の演算は numpy の linalg (Linear Algebra) を使うと良い.

目次に戻る

行列式

行列 \(A\) の行列式 \(|A|\) はたすきがけの原理で次のように定義される.

\begin{equation} A = \left[ \begin{array}{rrr} a_{11} & a_{12} & a_{13}\\ a_{21} & a_{22} & a_{23}\\ a_{31} & a_{32} & a_{33} \end{array} \right] \end{equation}
\begin{eqnarray} |A| &=& a_{11}a_{22}a_{33} + a_{12}a_{23}a_{31} + a_{13}a_{32}a_{21}\\ & & - a_{31}a_{22}a_{13} - a_{11}a_{23}a_{32} - a_{21}a_{12}a_{33} \end{eqnarray}

例えば次のような行列 \(A\) の行列式は \(|A| = 3\) となる.

\begin{equation} A = \left[ \begin{array}{rrr} 1 & -2 & 3 \\ 2 & -3 & 4\\ -2 & -1 & 1 \end{array} \right] \end{equation}
\begin{eqnarray} |A| &=& \left(1 \times(-3) \times 1\right) + \left( (-2) \times 4 \times (-2)\right) + \left(3 \times (-1) \times 2\right)\\ & & - \left((-2) \times (-3) \times 3 \right) - \left(1 \times 4 \times (-1) \right) - \left(2 \times (-2) \times 1 \right) \\ &=& -3 + 16 - 6 - 18 + 4 + 4 \\ &=& -3 \end{eqnarray}

行列式を NumPy で計算するには np.linalg.detを利用すると良い.なお,行列式は英語では determinant である.

行列式import numpy as np # プログラムの先頭でモジュールを読み込む
A = np.array([[1, -2, 3], [2, -3, 4],[-2, -1, 1]])
print(A)
det = np.linalg.det(A)
print(det)
[[ 1 -2  3]
 [ 2 -3  4]
 [-2 -1  1]]
-2.9999999999999996

なお,行列式の性質の一つに転置不変性がある.これは,行列を転置しても行列式は変化しないというものである.実際に確認してみよう.

転置した行列についての行列式B = np.transpose(A)
print(B)
det = np.linalg.det(B)
print(det)
[[ 1  2 -2]
 [-2 -3 -1]
 [ 3  4  1]]
-3.0000000000000018

行列式のもう一つの性質は交代性である.これは行(または列)を入れ替えると行列式は -1 倍されるというものである.これも確認してみよう.

1行目と2行目を入れ替えた行列の行列式C = np.array([[2, -3, 4],[1, -2, 3], [-2, -1, 1]])
print(C)
det = np.linalg.det(C)
print(det)
[[ 2 -3  4]
 [ 1 -2  3]
 [-2 -1  1]]
2.9999999999999996

目次に戻る