NumPyで行列式と逆行列を計算する
2023.02.18
行列式は linalg の det 関数、逆行列は linalg の inv 関数で計算します。
行列式:
import numpy as np
A = np.array([[1, 2], [3, 4]])
B = np.array([[3, 1, 5], [1, 1, 1], [0, 1, 2]])
d = np.linalg.det(A)
e = np.linalg.det(B)
print(d) # -2.0000000000000004
print(e) # 6.0
逆行列:
import numpy as np
A = np.array([[1, 2], [3, 4]])
B = np.array([[3, 1, 5], [1, 1, 1], [0, 1, 2]])
C = np.linalg.inv(A)
D = np.linalg.inv(B)
print(C)
# [[-2. 1. ]
# [ 1.5 -0.5]]
print(D)
# [[ 0.16666667 0.5 -0.66666667]
# [-0.33333333 1. 0.33333333]
# [ 0.16666667 -0.5 0.33333333]]
もとの行列と逆行列の積
逆行列はもとの行列とかけて単位行列になる行列です。上で求めた逆行列が本当に逆行列かどうか確かめます。
import numpy as np
A = np.array([[1, 2], [3, 4]])
B = np.linalg.inv(A)
C = np.dot(A, B)
D = np.dot(B, A)
print(C)
# [[1.0000000e+00 0.0000000e+00]
# [8.8817842e-16 1.0000000e+00]]
print(D)
# [[1.00000000e+00 0.00000000e+00]
# [1.11022302e-16 1.00000000e+00]]
8.8817842e-16 はマイナス 16 乗で、ほぼ 0 とみなしていいでしょう。わずかな誤差はありますが、ほぼ単位行列です。