行列演算と線形代数

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 で固有値・固有ベクトルを取得できる