行列の積の計算方法4通り


はじめに

2つの行列の積 $AB=C$ の計算方法をまとめました.よく知られているのは方法1のCの要素ごとに掛け算を行う方法ですが,ベクトルの線型結合を基にした他の計算方法も線形代数の核をなす重要な方法です.

参考:Gilbert Strang Introduction to Linear Algebra Lecture 3

方法1:Aの行×Bの列

一番スタンダードな方法です.Cのij要素の値をAのi行とBのj列の内積から求めます.

方法2:Aの列の線型結合

行列を列ベクトルの集合とみて,行列とベクトルの演算をCの列毎に適用していく方法です.線形方程式 $Ax=b$ を解くときの $Ax$ の掛け算と似ています.

Cのj列目をAとBのj列目の掛け算で計算することを列数分繰り返します.上の例だとCの2列目の値は

\left[
    \begin{array}{rrr}
      -1 & 0 & 3 \\
      0 & -2 & 1 \\
      2 & 2 & -1
    \end{array}
  \right]
\left[
 \begin{array}{r}
1 \\ 3 \\ 0
 \end{array}
\right]
=1\left[
 \begin{array}{r}
-1 \\ 0 \\ 2
 \end{array}
\right] +
3 \left[
 \begin{array}{r}
0 \\ -2 \\ 2
 \end{array}
\right]
+ 0\left[
 \begin{array}{r}
3 \\ 1 \\ -1
 \end{array}
\right]
= \left[
 \begin{array}{r}
-1 \\ -6 \\ 8
 \end{array}
\right]

で計算できます.この方法ではベクトルの束として扱われるAをsource, 係数として扱われるBをoperatorと呼びます.

方法3:Bの行の線型結合

先ほどは列を基準にして考えましたが,今度は行を基準として考えるやり方です.この場合Aがoperator, Bがsourceとなります.

Cのi列目をAのi列目とBの掛け算で計算することを行数分繰り返します.上の例だとCの1列目の値は

\left[
\begin{array}{rrr}
-1 & 0 & 3
\end{array}
\right]
\left[
    \begin{array}{rrr}
      2 & 1 & 2 \\
      0 & 3 & -1 \\
      1 & 0 & 3
    \end{array}
  \right]=
-1\left[
\begin{array}{rrr}
2 & 1 & 2
\end{array}
\right]
+0\left[
\begin{array}{rrr}
0 & 3 & -1
\end{array}
\right]
+3\left[
\begin{array}{rrr}
1 & 0 & 3
\end{array}
\right]
=\left[
\begin{array}{rrr}
1 & -1 & 7
\end{array}
\right]

で計算できます(上の計算の書き方は正式な行列の書き方ではないかもしれません).

方法4:Aの列×Bの行

行列の掛け算をする際の前提として,Aの列数とBの行数が一致していなければならないという約束があります.Aのサイズが $m\times l$ だとすればBのサイズは$l\times n$でなければいけません.
Aの$i$番目の列とBの$i$番目の行をかけると $m\times 1$ 行列と $1\times n$ 行列の掛け算で Cと同じ$m \times n$の行列ができるのですが,これを$l$個足しあわせるとABの積Cと一致します. 実際に$2 \times 2$行列でやってみましょう.

\left[
\begin{array}{rr}
2 & 1\\ 1 & 3
\end{array}
\right]
\left[
\begin{array}{rr}
0 & 1\\ 2 & 3
\end{array}
\right]
=
\left[
\begin{array}{r}
2 \\ 1
\end{array}
\right]
\left[
\begin{array}{rr}
0 & 1
\end{array} 
\right]
+\left[
\begin{array}{r}
1 \\ 3
\end{array}
\right]
\left[
\begin{array}{rr}
2 & 3
\end{array} 
\right]
=\left[
\begin{array}{rr}
0 & 2\\ 0 & 1
\end{array}
\right]
+\left[
\begin{array}{rr}
2 & 3\\ 6 & 9
\end{array}
\right]
=\left[
\begin{array}{rr}
2 & 5\\ 6 & 10
\end{array}
\right]

$l$個の行列の足し算が必要なので暗算向きではないですが,Cがランク1行列の和で表されており線形代数的には面白そうです.

最後に

今回紹介した方法以外にも行列の積の計算方法には部分行列を使った方法などがあります.
行列の積の計算方法を調べることは単に計算を楽にするだけでなく,線形代数が持つ行列に対する様々な見方を学習することにもつながると思うので意外と奥が深いテーマだと思いました.私も線形代数の勉強始めたばかりなので説明が誤っていたらどんどん指摘してください.他の方法を知っている方がいたらぜひコメント欄に書いていただけると勉強になります.