NumPyは、Pythonにおいて行列演算と線形代数の操作を行うための便利なライブラリです。
この記事では、NumPyを使用して行列演算と線形代数操作を行う方法を解説しています。
この記事の対象
行列の作成
import numpy as np
# 2x3の行列を作成
matrix = np.array([[1, 2, 3],
[4, 5, 6]])
print("行列:")
print(matrix)
上記では、np.array()
関数を使用して2×3の行列を作成しています。
結果
行列:
[[1 2 3]
[4 5 6]]
行列の積
行列の積は線形代数において非常に重要です。NumPyを使用して、行列の積を計算することができます。
import numpy as np
# 行列Aと行列Bを作成
A = np.array([[1, 2],
[3, 4]])
B = np.array([[5, 6],
[7, 8]])
# 行列の積を計算
result = np.dot(A, B)
print("行列A:")
print(A)
print("行列B:")
print(B)
print("行列の積:")
print(result)
上記では、np.dot()
関数を使用して行列Aと行列Bの積を計算しています。結果は新しい行列として得られます。
結果
行列A:
[[1 2]
[3 4]]
行列B:
[[5 6]
[7 8]]
行列の積:
[[19 22]
[43 50]]
逆行列
逆行列は、行列の除算に相当します。NumPyを使用して逆行列を計算できますが、逆行列が存在するかどうかに注意が必要です。
import numpy as np
# 2x2の行列を作成
matrix = np.array([[1, 2],
[3, 4]])
# 逆行列を計算
inverse_matrix = np.linalg.inv(matrix)
print("行列:")
print(matrix)
print("逆行列:")
print(inverse_matrix)
上記では、np.linalg.inv()
関数を使用して行列の逆行列を計算しています。ただし、逆行列が存在しない場合、エラーが発生するため注意が必要です。
結果
行列:
[[1 2]
[3 4]]
逆行列:
[[-2. 1. ]
[ 1.5 -0.5]]
特異値分解(SVD)
特異値分解(SVD)は、行列を三つの行列の積に分解するための一般的な手法です。NumPyを使用してSVDを計算できます。
import numpy as np
# 3x2の行列を作成
matrix = np.array([[1, 2],
[3, 4],
[5, 6]])
# SVDを計算
U, S, VT = np.linalg.svd(matrix)
print("行列:")
print(matrix)
print("U行列:")
print(U)
print("S行列:")
print(S)
print("VT行列:")
print(VT)
上記では、np.linalg.svd()
関数を使用して特異値分解を計算しています。結果はU、S、VTの3つの行列として得られます。
結果
行列:
[[1 2]
[3 4]
[5 6]]
U行列:
[[-0.2298477 0.88346102 0.40824829]
[-0.52474482 0.24078249 -0.81649658]
[-0.81964194 -0.40189603 0.40824829]]
S行列:
[9.52551809 0.51430058]
VT行列:
[[-0.61962948 -0.78489445]
[-0.78489445 0.61962948]]
よくあるエラーと回避方法
行列演算や線形代数操作を行う際によくあるエラーの一つは、行列の次元の不一致です。行列Aの列数が行列Bの行数と一致しない場合、行列の積を計算できません。また、逆行列が存在しない場合もエラーが発生します。これらのエラーに対処するために、行列の次元を確認し、逆行列が存在するかどうかを事前に検証することが重要になります。
まとめ
NumPyを使用することで、行列演算と線形代数操作を効果的に行うことができます。行列の作成から逆行列の計算、特異値分解まで、さまざまな線形代数の操作が可能です。
線形代数は機械学習やディープラーニングなどの分野で広く使用されており、NumPyはその基本的なツールとして不可欠です。