NumPy入門⑤ 行列演算と線形代数
行列演算の基本
NumPyは、行列やベクトルに関する線形代数の処理を効率的に行えます。
二次元配列を「行列」として扱い、加算・減算・積などの演算が可能です。
import numpy as np
A = np.array([[1, 2], [3, 4]])
B = np.array([[5, 6], [7, 8]])
print(A + B)
# [[ 6 8]
# [10 12]]
print(A - B)
# [[-4 -4]
# [-4 -4]]
行列の積(ドット積)
行列の積(内積)は np.dot または @ 演算子を使います。
print(np.dot(A, B))
# [[19 22]
# [43 50]]
print(A @ B) # Python 3.5以降
転置行列
行列の行と列を入れ替える操作です。
print(A.T)
# [[1 3]
# [2 4]]
単位行列
対角成分が1で、その他が0の正方行列を生成します。
I = np.eye(3)
print(I)
# [[1. 0. 0.]
# [0. 1. 0.]
# [0. 0. 1.]]
行列式
正方行列の行列式(determinant)は np.linalg.det で計算します。
det_A = np.linalg.det(A)
print(det_A) # -2.0000000000000004 (計算誤差あり)
逆行列
逆行列は np.linalg.inv で求めます。存在しない場合(行列式が0の場合)はエラーになります。
inv_A = np.linalg.inv(A)
print(inv_A)
# [[-2. 1. ]
# [ 1.5 -0.5]]
固有値と固有ベクトル
線形代数で重要な固有値・固有ベクトルも求められます。
eig_vals, eig_vecs = np.linalg.eig(A)
print(eig_vals) # 固有値
print(eig_vecs) # 固有ベクトル
まとめ
- 行列の加算・減算は要素ごとに演算される
- 行列積は
np.dotまたは@演算子を利用 np.linalg.detで行列式、np.linalg.invで逆行列を計算可能np.linalg.eigで固有値・固有ベクトルを取得できる