Python、機械学習

行列とベクトルの積、行列と行列の積の公式

式の導出でよく出てくる、行列とベクトルの積、行列と行列の積。

意外と詰まりがちなので、以下まとめてみました。

行列とベクトルの積

行列を列ベクトルの集まりとして見る

$\begin{array}{l}

\boldsymbol{X} =\left(\begin{array}{llll}\boldsymbol{x_{1}} & \boldsymbol{x_{2}} & \cdots & \boldsymbol{x_{n}}\end{array}\right),\qquad

\boldsymbol{a} =\left(\begin{array}{l}

a_{1} \\

a_{2} \\

\vdots \\

a_{n}

\end{array}\right)

\end{array}$

$\begin{aligned}

\boldsymbol{X} \boldsymbol{a} &=\left(\begin{array}{llll}

\boldsymbol{x_{1}} & \boldsymbol{x_{2}} & \cdots & \boldsymbol{x_{n}}

\end{array}\right)\left(\begin{array}{c}

a_{1} \\

a_{2} \\

\vdots \\

a_{n}

\end{array}\right) \\

&=a_{1} \boldsymbol{x_{1}}+a_{2} \boldsymbol{x_{2}}+\cdots+a_{n} \boldsymbol{x_{n}}

\end{aligned}$

行列を行ベクトルの集まりとして見る

$\begin{array}{l}

\boldsymbol{X}=\left(\begin{array}{c}

\boldsymbol{x_{1}^{\top}} \\

\boldsymbol{x_{2}^{\top}} \\

\vdots \\

\boldsymbol{x_{n}^{\top}}

\end{array}\right) ,\qquad

\boldsymbol{a}=\left(\begin{array}{l}

a_{1} \\

a_{2} \\

\vdots \\

a_{n}

\end{array}\right)

\end{array}$

$\begin{aligned}

\boldsymbol{X}\boldsymbol{a} &=\left(\begin{array}{c}

\boldsymbol{x_{1}^{\top}} \\

\boldsymbol{x_{2}^{\top}} \\

\vdots \\

\boldsymbol{x_{n}^{\top}}

\end{array}\right) \boldsymbol{a} \\

&=\left(\begin{array}{c}

\boldsymbol{x_{1}^{\top}}\boldsymbol{a} \\

\boldsymbol{x_{2}^{\top}} \boldsymbol{a} \\

\vdots \\

\boldsymbol{x_{n}^{\top}} \boldsymbol{a}

\end{array}\right)

\end{aligned}$

 

行列と行列の積

前の行列が列ベクトルの集まり、後ろの行列が行ベクトルの集まり

$\begin{array}{l}

\boldsymbol{X} =\left(\begin{array}{llll}\boldsymbol{x_{1}} & \boldsymbol{x_{2}} & \cdots & \boldsymbol{x_{n}}\end{array}\right),\qquad

\boldsymbol{Y}=\left(\begin{array}{c}

\boldsymbol{y_{1}^{\top}} \\

\boldsymbol{y_{2}^{\top}} \\

\vdots \\

\boldsymbol{y_{m}^{\top}}

\end{array}\right)

\end{array}$

$\begin{aligned}

\boldsymbol{X} \boldsymbol{Y} &=\left(\begin{array}{llll}

\boldsymbol{x_{1}} & \boldsymbol{x_{2}} & \cdots & \boldsymbol{x_{n}}

\end{array}\right)\left(\begin{array}{c}

\boldsymbol{y_{1}^{\top}} \\

\boldsymbol{y_{2}^{\top}} \\

\vdots \\

\boldsymbol{y_{n}^{\top}}

\end{array}\right) \\

&= \boldsymbol{x_{1}}\boldsymbol{y_{1}^{\top}} +\boldsymbol{x_{2}}\boldsymbol{y_{2}^{\top}}+\cdots+\boldsymbol{x_{n}}\boldsymbol{y_{n}^{\top}} 

\end{aligned}$

前の行列が行ベクトルの集まり、後ろの行列が列ベクトルの集まり

$\begin{array}{l}

\boldsymbol{X}=\left(\begin{array}{c}

\boldsymbol{x_{1}^{\top}} \\

\boldsymbol{x_{2}^{\top}} \\

\vdots \\

\boldsymbol{x_{n}^{\top}}\end{array}\right),\qquad

\boldsymbol{Y} =\left(\begin{array}{llll}\boldsymbol{y_{1}} & \boldsymbol{y_{2}} & \cdots & \boldsymbol{y_{m}}\end{array}\right)

\end{array}$

$\begin{aligned}

\boldsymbol{X}\boldsymbol{Y} &=\left(\begin{array}{c}

\boldsymbol{x_{1}^{\top}} \\

\boldsymbol{x_{2}^{\top}} \\

\vdots \\

\boldsymbol{x_{n}^{\top}}

\end{array}\right) \left(\begin{array}{llll}\boldsymbol{y_{1}} & \boldsymbol{y_{2}} & \cdots & \boldsymbol{y_{m}}\end{array}\right) \\

&=\left(\begin{array}{cccc}

\boldsymbol{x_{1}^{\top}} \boldsymbol{y_{1}} & \boldsymbol{x_{1}^{\top}} \boldsymbol{y_{2}} & \dots & \boldsymbol{x_{1}^{\top}} \boldsymbol{y_{m}} \\

\boldsymbol{x_{2}^{\top}} \boldsymbol{y_{1}} & \boldsymbol{x_{2}^{\top}} \boldsymbol{y_{2}} & \dots & \boldsymbol{x_{2}^{\top}} \boldsymbol{y_{m}}\\

\vdots & \vdots & & \vdots \\

\boldsymbol{x_{n}^{\top}} \boldsymbol{y_{1}} & \boldsymbol{x_{n}^{\top}} \boldsymbol{y_{2}} & \dots & \boldsymbol{x_{n}^{\top}} \boldsymbol{y_{m}}

\end{array}\right)

\end{aligned}$

次のような書き方もできます。

$\begin{aligned}

\boldsymbol{X}\boldsymbol{Y} &=\boldsymbol{X} \left(\begin{array}{llll}\boldsymbol{y_{1}} & \boldsymbol{y_{2}} & \cdots & \boldsymbol{y_{m}}\end{array}\right) &= \left(\begin{array}{llll}\boldsymbol{X}\boldsymbol{y_{1}} & \boldsymbol{X}\boldsymbol{y_{2}} & \cdots & \boldsymbol{X}\boldsymbol{y_{m}}\end{array}\right) 

\end{aligned}$