Python入門トップページ
- NumPy とは
- Python リストの場合
- NumPy の使用例
- NumPy で線形代数
- 行列式
- 単位行列
- 逆行列
- 行列の階数
- 固有値
- 固有値の応用例:PageRank
- ノルム(L1ノルムとL2ノルム)
- 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
目次に戻る