非IT企業に勤める中年サラリーマンのIT日記

非IT企業でしかもITとは全く関係ない部署にいる中年エンジニア。唯一の趣味がプログラミングという”自称”プログラマー。

【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]]
 

 

 

 

スポンサーリンク

 - Python