【Python】行列とベクトルの@演算:計算方向で結果が変わるので要注意!
Pythonのnumpyでは、@演算子を使うことで行列やベクトルの積を計算できます。しかし、行列積の計算方向によって結果が異なるので要注意です。資格試験などでもここについては出題されるはずなので、この記事で詳細に解説します。
まずはプログラム例
以下のプログラム例の通り行列数の異なる@演算では計算方向で結果が異なります。
import numpy as np a = np.array([[1, 2], [3, 4]]) b = np.array([1, 3]) print(a @ b) print(b @ a) # 出力結果 # [ 7 15] # [10 14]
[[1, 2], [3, 4]] @ [1, 3] の場合
これは、行列✕ベクトルの計算となり、数式で表すと以下のようになります。
よって、
- 第1行とベクトルの内積: (1×1)+(2×3)=1+6 = 7
- 第2行とベクトルの内積: (3×1)+(4×3)=3+12 = 15
これにより、結果は以下の通りとなりプログラムの実行結果は、[ 7 15]と出力されます。
[1, 3] @ [[1, 2], [3, 4]] の場合
今度は計算方向を逆にしたパターンです。
今回はベクトルを左から行列に掛けています。この場合ベクトルと行列の積を計算することになります。行列積の計算ルールに従うと、次のようになります。
よって、
- 第1列に対する計算: (1×1)+(3×3)=1+9 = 10
- 第2列に対する計算: (1×2)+(3×4)=2+12 = 14
これにより、結果は以下の通りとなりプログラムの実行結果は、[10 14]と出力されます。
まとめ
行列積では、計算の方向によって結果が異なるため、行列とベクトルの形状を意識することが重要です。行列 @ ベクトルでは行列の各行とベクトルの内積を計算し、結果は縦ベクトルになります。一方、ベクトル @ 行列ではベクトルと行列の各列との内積を計算し、結果は横ベクトルになります。
この違いを理解することで、numpyを使った計算がスムーズになります。
スポンサーリンク


