Pythonで行列とベクトルの積を求めたいときは、NumPyを使うのが一般的です。ここではそのための方法についてわかりやすく解説していきます。
1. 行列とベクトルの積とは
行列とベクトルの積とは、ベクトルを行列に入力して、新しいベクトルを出力するというものです。これを式で表すと \(A\vec{x}=\vec{y}\) となります。これは、幾何学的には以下のアニメーションで示しているように、入力ベクトルが出力ベクトルへと移動することを表しています。
より詳しくは『行列とベクトルの積とは何か?計算方法と幾何学的な意味を徹底解説』で解説しているので、ぜひご確認ください。
なお、計算方法は以下の通りです。
2次元ベクトルと2次行列の積
\[
\begin{eqnarray}
A\vec{v}
=
\left[ \begin{array}{cc} a_{11} & a_{12} \\a_{21}&a_{22} \end{array} \right]
\left[ \begin{array}{cc} v_1 \\ v_2 \end{array} \right]
=
\left[ \begin{array}{cc}
a_{11}v_1+a_{12}v_2 \\
a_{21}v_1+a_{22}v_2 \end{array} \right]
\end{eqnarray}
\]
3次元ベクトルと3次行列の積
\[
A\vec{v}= \left[ \begin{array}{cc}
a_{11} & a_{12} & a_{13} \\
a_{21}& a_{22} & a_{23}\\
a_{31}& a_{32} & a_{33}
\end{array} \right]
\left[ \begin{array}{cc} v_1 \\ v_2 \\ v_3 \end{array} \right]
=
\left[ \begin{array}{cc}
a_{11}v_1 +a_{12}v_2+ a_{13}v_3 \\
a_{21}v_1+ a_{22}v_2 + a_{23}v_3\\
a_{31}v_1+ a_{32}v_2 + a_{33}v_3
\end{array} \right]
\]
2. NumPyで行列とベクトルの積を計算する方法
NumPyで行列とベクトルの積を計算するには演算子 @
を使います。
2.1. 2次行列と2次元ベクトルの積
例として以下の計算を行ってみましょう。
\[
\begin{eqnarray}
A\vec{v}
=
\left[ \begin{array}{cc} 1 & 2 \\ 3 & 4 \end{array} \right]
\left[ \begin{array}{cc} 2 \\ -1 \end{array} \right]
=
\left[ \begin{array}{cc}
0 \\
2 \end{array} \right]
\end{eqnarray}
\]
これは以下のようにおこないます。なお、NumPy配列でベクトルや行列を作成する方法は、『Numpyでベクトルや行列を作成する方法【線形代数】』で解説していますので、ぜひご確認ください。
import numpy as np
# 行列を作成
A=np.array([[1,2],[3,4]])
print(A)
# ベクトルを作成
v=np.array([2,-1])
print(v)
# 行列とベクトルの積
A@v
2.2 3次行列と3次元ベクトルの積
もう一つ以下の計算を行ってみましょう。
\[
\begin{eqnarray}
A\vec{v}
=
\left[ \begin{array}{cc} 1 & 0 & 1 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \end{array} \right]
\left[ \begin{array}{cc} 2 \\ 2 \\-2 \end{array} \right]
=
\left[ \begin{array}{cc}
0 \\
2 \\
-2 \end{array} \right]
\end{eqnarray}
\]
次の通りです。
import numpy as np
# 3次正方行列を作成
A=np.array([[1,0,1],[0,1,0],[0,0,1]])
A
# ベクトルを作成
v=np.array([2,2, -2])
print(v)
# 行列とベクトルの積
A@v
なお行列の行数とベクトルの列数が揃っていれば、非正方行列とベクトルの積も行えます。
2.3. 複数の積を一括取得
次のように書くと、複数の行列とベクトルとの積を一括で取得することができます。
import numpy as np
# 3つの2次正方行列
A=np.array([[[1,2],[3,4]],[[5,6],[7,8]],[[9,0],[1,2]]])
A
# ベクトル
v=np.array([1,1])
v
A@v
3. まとめ
以上がNumPyで行列とベクトルの積を計算する方法です。
コメント