Python入門トップページ


目次

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

NumPy

NumPy で線形代数

逆行列

正方行列 \(A\) に対して,\(AX = E\) となるような正方行列 \(X\) が存在するとき,正方行列 \(A\) は正則であるといい,\(X\) を \(A\) の逆行列 (inverse matrix)という.また,正方行列 \(A\) が正則であるための必要十分条件は \(|A| \neq 0\) である.逆行列は np.linalg.inv() を用いると良い.なお,\(|A|\) は正方行列 \(A\) の行列式である.

3次元単位行列import numpy as np # プログラムの先頭でモジュールを読み込む
A = np.array([[2, 0, 1], [-1, 1, 0],[-2, 3, 4]])
print(A)
inv = np.linalg.inv(A)
print(inv)
[[ 2  0  1]
 [-1  1  0]
 [-2  3  4]]
[[ 0.57142857  0.42857143 -0.14285714]
 [ 0.57142857  1.42857143 -0.14285714]
 [-0.14285714 -0.85714286  0.28571429]]

実際に \(AX = E\) となることを確認しておこう.

逆行列の確認print(np.dot(A, inv))
[[ 1.00000000e+00  0.00000000e+00  0.00000000e+00]
 [ 1.11022302e-16  1.00000000e+00 -5.55111512e-17]
 [ 0.00000000e+00  4.44089210e-16  1.00000000e+00]]

なお,上の結果で 1.00000000e+00 は \(1.0 \times 10^0 = 1.0\) を意味し,1.11022302e-16 は \(1.11022302 \times 10^{-16} = 0.000000000000000111022302 \approx 0.0 \) を意味することに注意しよう.つまり結果は単位行列になっている.さらに,この正方行列 \(A\) の行列式を求めると \(|A| \neq 0\) なることも確認できる.

行列式の確認det = np.linalg.det(A)
print(det)
6.999999999999998

もちろん逆行列が存在しない行列もある.次のような行列は行列式が0となるので,正則ではなく,逆行列を計算できない.

行列式の確認A = np.array([[2, 0, 1], [2, 0, 1],[-2, 3, 4]])
print(A)
det = np.linalg.det(A)
print(det)
inv = np.linalg.inv(A)
print(inv)
[[ 2  0  1]
 [ 2  0  1]
 [-2  3  4]]
0.0
------------------------------------------------
LinAlgError    Traceback (most recent call last)
(以下のエラーメッセージは省略)

目次に戻る