【Python】@演算子で学ぶ行列積の順序と結果の違い
Pythonでは、行列の乗算を行うために@演算子が利用できます。特にnumpyライブラリと併用すると、効率的に行列演算ができます。本記事では基本的な使い方から複雑な計算までを、プログラム例とともに解説します。
@演算子の基本
以下のコードでは、@演算子を使ってNumPy 配列の行列積を計算しています。最初の A @ B では、A と B が 1 次元配列のため、内積(1*3 + 2*4 = 11)が計算されます。次の A @ B では、A が 1 行 2 列の 2 次元配列となり、行列積の計算が行われ、結果は [11] という 1 次元配列になります。
import numpy as np A = np.array([1, 2]) B = np.array([3, 4]) print(A @ B) A = np.array([[1, 2]]) B = np.array([3, 4]) print(A @ B) # 出力結果 # 11 # [11]
行列×ベクトル積の場合
Aは2×2行列、Bは2要素の1次元配列です。A @ Bは行列とベクトルの積となり次の結果が得られます。
import numpy as np A = np.array([[1, 2],[3, 4]]) B = np.array([5, 6]) # [1*5 + 2*6, 3*5 + 4*6] = [17, 39] print(A @ B) # [5*1 + 6*3, 5*2 + 6*4] = [23, 34] print(B @ A) # 出力結果 # [17 39] # [23 34]
行列×行列積の場合
このプログラムは、NumPyの@演算子を使って2つの行列AとBの積を計算しています。行列積は可換ではないため、A @ BとB @ Aの結果は異なります。
import numpy as np A = np.array([[1, 2], [3, 4]]) B = np.array([[-1, -2], [2, 1]]) print(A @ B) print(B @ A) # 出力結果 # [[ 3 0] # [ 5 -2]] # [[ -7 -10] # [ 5 8]]
スポンサーリンク