行列の積(掛け算)とは何か?わかりやすく解説

行列の積(掛け算)とは、簡単に言うと、空間を異なる複数の行列で続けて線形変換したときに、空間が最終的にどう変化するのかの計算です。いきなりですが、まずは以下のアニメーションをご覧ください。行列の積とは何であるかが一目でわかります。

このように行列の積とは、複数の行列で続けて線形変換することです。

このページでは、この行列の積について、アニメーションを使いながらさらに深く解説していきます。読み終える頃には、行列に対する理解が深まりスッキリしていることでしょう。そのためにも、ぜひ楽しみながらご覧頂ければ嬉しく思います。

先に読んでおきたいページ
行列の積を理解するには、線形変換について理解しておく必要があります。これについては、『線形変換とは?誰でも必ず理解できるようにアニメーションで解説』で解説しているのでぜひご確認ください。

目次

1. 行列の積(掛け算)とは何か

前回の記事『線形変換とは?誰でも必ず理解できるようにアニメーションで解説』では、行列とは「入力したベクトルを新しい異なるベクトルとして出力する関数である」、ということをお伝えしました。

おさらいとして以下のアニメーションをご確認ください。

このように、ベクトルを変換する関数が行列です。そして行列の積とは、複数の行列で続けて線形変換を行うことを意味します。

たとえば以下の二つの行列があるとします。

\[
A=\left[ \begin{array}{cc} 1 & 0 \\ 0 & 2 \end{array} \right],
\hspace{4mm}
B=\left[ \begin{array}{cc} 0 & -1 \\ 1 & 0 \end{array} \right]
\]

\(A\) は空間を縦方向に引き伸ばし、\(B\) は空間を時計回りに90度回転させる行列です。

それでは、 \(A\) で線形変換した後に \(B\) で線形変換をするとどうなるでしょうか?以下のアニメーションで確認しましょう。

ご覧のように行列の積とは、複数の異なる行列で続けて線形変換することなのです。そして行列の積の解は、複数の線形変換を行った後の基底ベクトル \(\hat{\imath}\) と \(\hat{\jmath}\) の最終的な行き先を示します。この点は重要なのでしっかりと覚えておいてください(基底ベクトルについては『基底ベクトルとは何か?アニメーションで一目で理解』で解説しています)

なお普通の掛け算と違って、行列の積では、最初に線形変換に使うものを右に置いて、次の行列をその左、次の行列をそのまた左というように左側に置いていきます。

この理由は、線形代数において行列は写像であり、関数と同じものだからです。数学やプログラミングでは、関数では、たとえば \(g(f(x)) \) と書いたら、\(g()\) の処理を行なってから \(f()\) の処理を行うのではなく、先に \(f()\) の処理を行ってから \(g()\) の処理を行います。

線形代数においても、これと同じでベクトルと行列の積を求めるときは、関数と同じようにベクトルを行列に入力するという意味で \(A\vec{x}\) と計算します。そして、この出力値をさらに別の行列 \(B\) に入力する場合は、\(BA\vec{x}\) と書きます。

以上がベクトルの積の幾何学的な意味です。

重要な点なので、もう一度強調しておきます。行列の積とは「複数の異なる行列で続けて線形変換すること」です。

2. 行列の積(掛け算)の計算方法

さて、それでは行列の積とは何かがわかったところで、次にその計算方法について学んでいきましょう。答えから言うと、行列の積は以下のように計算します。

ご覧いただくとわかりますが、2次行列同士の積はまだ簡単ですが、3次行列以上の積になると中々面倒に見えます。しかし、すぐ後でこの計算方法について理解するためのコツについてお伝えしますのでご安心ください。このコツさえ掴めば、計算方法を暗記する必要はなくなります。

\(2×2\) 行列の積

\[
\left[ \begin{array}{cc} a & b \\ c & d \end{array} \right]
\left[ \begin{array}{cc} e & f \\g & h \end{array} \right]
=
\left[ \begin{array}{cc} ae+bg & af+bh \\ ce+dg & cf+dh \end{array} \right]
\]

\(3×3\) 行列の積

\[\begin{eqnarray}
\left[ \begin{array}{ccc}
a_{11} & a_{12} & a_{13} \\
a_{21} & a_{22} & a_{23} \\
a_{31} & a_{32} & a_{33}
\end{array} \right]
\left[ \begin{array}{ccc}
b_{11} & b_{12} &b_{13} \\
b_{21} & b_{22} & b_{23} \\
b_{31} & b_{32} & b_{33}
\end{array} \right]
=
\left[ \begin{array}{ccc}
a_{11}b_{11} + a_{12}b_{21} +a_{13}b_{31} &
a_{11}b_{12} + a_{12}b_{22} +a_{13}b_{32} &
a_{11}b_{13} + a_{12}b_{23} +a_{13}b_{33} \\
a_{21}b_{11} + a_{22}b_{21} +a_{23}b_{31} &
a_{21}b_{12} + a_{22}b_{22} +a_{23}b_{32} &
a_{21}b_{13} + a_{22}b_{23} +a_{23}b_{33} \\
a_{31}b_{11} + a_{32}b_{21} +a_{33}b_{31} &
a_{31}b_{12} + a_{32}b_{22} +a_{33}b_{32} &
a_{31}b_{13} + a_{32}b_{23} +a_{33}b_{33}
\end{array} \right]
\end{eqnarray}\]

さて、上のアニメーションで見たように、行列の積は \(\hat{\imath}\) と \(\hat{\jmath}\) の最終的な行き先なので、幾何学的に理解することで、はるかに導き出しやすくなります。

それでは、そのためにはどうすればいいでしょうか?

そう、行列の積は基底ベクトルの最終的な行き先であることを意識して計算してみれば良いのです。そのためのコツをわかりやすく示しているのが以下のアニメーションです。

このように行列の積は、複数の行列で線形変換したときの基底ベクトルの最終的な行き先であることさえ理解できれば、ベクトルと行列の積と同じように計算することができます(参照:『ベクトルと行列の積とは何か?計算方法と幾何学的な意味を徹底解説』)。このことを覚えておけば、上でお見せした公式を暗記する必要などなくなります。

これが3次行列同士の積になっても考え方はまったく同じです。この場合、行列の積は、複数の行列で続けて線形変換を行ったときの、\(\hat{\imath}\) 、 \(\hat{\jmath}\)、\(\hat{k}\) のそれぞれの基底ベクトルの最終的な行き先を示すものです。

ぜひ理解を自分のものにするために、3次行列の積について自分で考えてみてください。繰り返しになりますが、行列の積の解は最終的な基底ベクトル \(\hat{\imath}\) 、 \(\hat{\jmath}\)、\(\hat{k}\) の行き先です。これが腑に落ちれば、行列の積の計算は、単なるベクトルと行列の積に過ぎません。

3. 行列の積(掛け算)の性質

さて、以上が行列の積の意味と計算方法です。これに加えて、行列の積は、通常の数の積とは異なる特徴があるので、ここではそれについて解説しておきたいと思います。

3.1. \(BA \neq AB\)

普通の算数の掛け算と違って、行列の積 \(BA\) と \(AB\) は異なります。

\[BA \neq AB\]

このことは線形変換をイメージすると、非常に明確に理解することができます。例えば、以下のように \(A\) が回転行列で、\(B\) が剪断せんだん行列だとします。

\[\begin{eqnarray}
A=
\left[ \begin{array}{cc} 0 & -1 \\1 & 0 \end{array} \right],
\hspace{4mm}
B=
\left[ \begin{array}{cc} 1 & 0 \\ 1 & 1 \end{array} \right]
\end{eqnarray}\]

このとき、\(BA\) と \(AB\) では基底ベクトルの最終的な行き先が異なります。このことは以下のアニメーションを見て頂くことで、完璧に理解することができます。

※注. 以下の線形変換のアニメーションには間違いがあります。行列の積ABは正しくは、\(\left[ \begin{array}{cc} -1 & -1 \\ 1 & 0 \end{array} \right]
\) となります。

3.2. \((CB)A=C(BA)\)

なお、普通の算数の積と同じように、行列の積でも \((CB)A=C(BA)\) となります。

これは三つの行列 \(CBA\) の積において、それぞれの行列の順番さえ同じであれば、どの部分から掛けても解は同じになるということを表しています。先に \(CB\) を計算してから最後に \(A\) を掛けても、先に \(BA\) を計算してから最後に \(C\) を左から掛けても同じなのです。

ただし、これを数学的に証明するのは、以下のようにうんざりするほど面倒です。

証明式を見る

\[\begin{eqnarray}
C(BA)=(CB)A
&\rightarrow&
\left[ \begin{array}{cc} a & b \\c & d \end{array} \right]
\left(
\left[ \begin{array}{cc} e & f \\ g & h \end{array} \right]
\left[ \begin{array}{cc} i & j \\ k & l \end{array} \right]
\right)
=
\left(
\left[ \begin{array}{cc} a & b \\c & d \end{array} \right]
\left[ \begin{array}{cc} e & f \\ g & h \end{array} \right]
\right)
\left[ \begin{array}{cc} i & j \\ k & l \end{array} \right]\\
&\rightarrow&
\left[ \begin{array}{cc}
i(ae+bg)+k(af+bh) &
j(ae+bg)+l(af+bh) \\
i(ce+dg)+k(cf+dh) &
j(ce+dg)+l(cf+dh)
\end{array} \right]
=
\left[ \begin{array}{cc}
a(ei+fk)+b(gi+hk) &
a(ej+fl)+b(gj+hl) \\
c(ei+fk)+d(gi+hk) &
c(ej+fl)+d(gj+hl)
\end{array} \right]\\
&\rightarrow&
\left[ \begin{array}{cc}
aei+bgi+afk+bhk &
aej+bgj+afl+bhl \\
cei+dgi+cfk+dhk &
cej+dgj+cfl+dhl)
\end{array} \right]
=
\left[ \begin{array}{cc}
aei+afk+bgi+bhk &
aej+afl+bgj+bhl) \\
cei+cfk+dgi+dhk &
cej+cfl+dgj+dhl
\end{array} \right]\\
\end{eqnarray}\]

教科書ではこのような非常に面倒な計算が求められますが、幾何学的に考えれば、\(CBA\) という積の計算は、\(C(BA)\) と計算しようが、\((CB)A\) と計算しようが、結局、最初に \(A\) で線形変換して、次に \(B\) で線形変換して、最後に \(C\) で線形変換するということと同じであることがわかります。

結局、どちらも \(CBA\) なので、基底ベクトルが行き着く場所は変わらないのです(ピンと来ない方はもう一度、前章の「1.行列の積とは何か」をじっくりと読んで考えてみてください)

一応、以下に両方の場合のアニメーションを載せておきますが、行列を幾何学的にイメージできるようになっていれば、これは証明する必要がないほど当たり前のことであることがわかります。

余談ですが、このように行列の積を幾何学的にイメージできるようになれば、ただ単に計算方法を理解しているだけという場合よりも、遥かに柔軟な思考力と発想力を与えてくれます。実際に偉大な数学的発見のほとんどは、このようにイメージするところから生まれています。

だからこそ、あらためて「行列の積とは、ある行列 \(A\) で線形変換を行い、次に \(B\) で線形変換を行った場合の合成写像(=基底ベクトルの最終的な行き先)を求めるものである」ということを、しっかりと頭に叩き込んでイメージできるようになっておきましょう。

4. 行列の積(掛け算)の練習問題

それでは最後に行列の積の練習問題を用意しておきます。ぜひ一度ご自身で解いてみてください。

練習問題
以下に行列の積の練習問題を用意しています。理解を深めるために是非チャレンジしてみてください。解答の解説もあるので、ここまでお伝えしてきた内容の確認のためにも有用です。

【練習問題】2次行列の積

問題:以下の2つの行列の積 \(BA\) を求めよ。

\[
\begin{eqnarray}
A = \left[\begin{array}{cc} 2 & 3 \\ 6 & 5 \end{array} \right],
\hspace{3mm}
B = \left[ \begin{array}{cc} 5 & 3 \\4 & 1 \end{array} \right]
\end{eqnarray}
\]

解説と解答

最初の行列 \(A\) による線形変換では、\(\hat{\imath}\) は \(A\) の一列目に移動します。ということは、\(\hat{\imath}\) の最終的な行き先は、以下のベクトルと行列の積で求めることができます。

\[
\begin{eqnarray}
\left[ \begin{array}{cc} 5 & 3 \\4 & 1 \end{array} \right]
\left[ \begin{array}{cc} 2 \\ 6 \end{array} \right]
\end{eqnarray}
=
\left[ \begin{array}{cc}
5\cdot2 + 3\cdot6\\
4\cdot2 + 1\cdot6
\end{array} \right]
=
\left[ \begin{array}{cc}
28\\
14
\end{array} \right]
\]

同じように、最初の行列 \(A\) による線形変換では \(\hat{\jmath}\) は \(A\) の二列目に移動するので、\(\hat{\jmath}\) の最終的な行き先は、以下のベクトルと行列の積で求めることができます。

\[
\begin{eqnarray}
\left[ \begin{array}{cc} 5 & 3 \\4 & 1 \end{array} \right]
\left[ \begin{array}{cc} 3 \\ 5 \end{array} \right]
\end{eqnarray}
=
\left[ \begin{array}{cc}
5\cdot3 + 3\cdot5\\
4\cdot3 + 1\cdot5
\end{array} \right]
=
\left[ \begin{array}{cc}
30\\
17
\end{array} \right]
\]

以上のことから解答は以下の通りです。

\[
\begin{eqnarray}
BA
=
\left[ \begin{array}{cc}
28&30\\
14&17
\end{array} \right]
\end{eqnarray}
\]

【練習問題】3次行列の積

問題:以下の2つの行列の積 \(BA\) を求めよ。

\[
\begin{eqnarray}
A = \left[\begin{array}{cc}
1 & 0 & 0 \\
0 & 1 & 1 \\
0 & 0 & 2
\end{array} \right],
\hspace{3mm}
B = \left[ \begin{array}{cc}
2 & 0 & 0 \\
0 & -1 & 0 \\
3 & 0 & -1
\end{array} \right]
\end{eqnarray}
\]

解説と解答

最初の行列 \(A\) による線形変換では、\(\hat{\imath}\) は \(A\) の一列目に移動します。ということは、\(\hat{\imath}\) の最終的な行き先は、以下のベクトルと行列の積で求めることができます。

\[
\begin{eqnarray}
\left[ \begin{array}{cc}
2 & 0 & 0 \\
0 & -1 & 0 \\
3 & 0 & -1
\end{array} \right]
\left[\begin{array}{cc}
1 \\
0 \\
0
\end{array} \right]
&=&
\left[ \begin{array}{cc}
2\cdot1 + 0\cdot0 + 0\cdot0 \\
0\cdot1 + (-1)\cdot0 + 0\cdot0 \\
3\cdot1 + 0\cdot0 + (-1)\cdot0
\end{array} \right]\\
&=&
\left[ \begin{array}{cc}
2 \\
0 \\
3
\end{array} \right]
\end{eqnarray}
\]

続いて最初の行列 \(A\) による線形変換では、\(\hat{\jmath}\) は \(A\) の二列目に移動します。ということは、\(\hat{\jmath}\) の最終的な行き先は、以下のベクトルと行列の積で求めることができます。

\[
\begin{eqnarray}
\left[ \begin{array}{cc}
2 & 0 & 0 \\
0 & -1 & 0 \\
3 & 0 & -1
\end{array} \right]
\left[\begin{array}{cc}
0 \\
1 \\
0
\end{array} \right]
&=&
\left[ \begin{array}{cc}
2\cdot0 + 0\cdot1 + 0\cdot0 \\
0\cdot0 + (-1)\cdot1 + 0\cdot0 \\
3\cdot0 + 0\cdot1 + (-1)\cdot0
\end{array} \right]\\
&=&
\left[ \begin{array}{cc}
0 \\
-1 \\
0
\end{array} \right]
\end{eqnarray}
\]

最後に最初の行列 \(A\) による線形変換では、\(\hat{k}\) は \(A\) の三列目に移動します。ということは、\(\hat{k}\) の最終的な行き先は、以下のベクトルと行列の積で求めることができます。

\[
\begin{eqnarray}
\left[ \begin{array}{cc}
2 & 0 & 0 \\
0 & -1 & 0 \\
3 & 0 & -1
\end{array} \right]
\left[\begin{array}{cc}
0 \\
-1 \\
2
\end{array} \right]
&=&
\left[ \begin{array}{cc}
2\cdot0 + 0\cdot1 + 0\cdot2 \\
0\cdot0 + (-1)\cdot1 + 0\cdot2 \\
3\cdot0 + 0\cdot1 + (-1)\cdot2
\end{array} \right]\\
&=&
\left[ \begin{array}{cc}
0 \\
1 \\
-2
\end{array} \right]
\end{eqnarray}
\]

以上のことから解答は次の通りです。

\[
\begin{eqnarray}
BA=
\left[ \begin{array}{cc}
2 & 0 & 0 \\
0 & -1 & -1 \\
3 & 0 & -2
\end{array} \right]
\end{eqnarray}
\]

5. まとめ

以上が行列の積です。

あらためて重要な点を振り返っておきましょう。

まず行列の積とは写像の合成です。つまり、行列 \(A\) と \(B\) があるとき、行列の積 \(BA\) は、まず \(A\) で線形変換してから、次に \(B\) で線形変換したときの、基底ベクトル \(\hat{\imath}\) と \(\hat{\jmath}\) の最終的な行き先を示しています。これを「写像の合成」といいます

行列の積のこのような公式は、最初は難解なもののように見えてしまいます。しかし、行列の積 \(BA\) が写像の合成である(\(A\)で線形変換してから \(B\) で線形変換したものである)ということを幾何学的にイメージできるようになっていれば、決してそうではないことがわかります。

そして、行列の積を幾何学的にイメージできるようになっていれば、行列の積 \(BA\) と \(AB\) では最終的に得られる空間(基底ベクトルの行き先)が異なることも容易に理解できるようになります。

この、まとめでお伝えしたことが、すんなりと理解できるようであれば、行列の積についてのあなたの理解は十分なものであると言えます。もし、そうでないなら、わかるようになるまで何度も読み返してみてください。きっとそれだけの価値はあるでしょう。

Python初心者におすすめのプログラミングスクール

「未経験からでもPythonを学べるプログラミングスクールを探しているけど、色々ありすぎてわからない」なら、次の3つのプログラミングスクールから選んでおけば間違いはありません。

Aidemy Premium:全くの初心者ができるだけ効率よく短期間で実務的に活躍できるAI人材になることを目的とした講座。キャリアカウンセリングや転職エージェントの紹介などの転職支援も充実しており、受講者の転職成功率が高い。

AIジョブカレPythonの基本をおさえた人が、実際に機械学習やディープラーニングを活用できるようになるための講座。転職補償型があるなどキャリア支援の内容が非常に手厚く、講師の質も最高クラス。コスパ最高。Python初心者用の対策講座もある。

データミックスプログラミング経験者のビジネスマンが、更なるキャリアアップのためにデータの処理方法を学んでデータサイエンティストになるための講座。転職だけでなく起業やフリーランスとして独立する人も多い。Python初心者用の対策講座もある。

特に、あなたが以下のような目標を持っているなら、この中から選んでおけば間違いはないでしょう。

・未経験からPythonエンジニアとして就職・転職したい
・AIエンジニアやデータサイエンティストとしてキャリアアップしたい
・起業やフリーランスを視野に入れたい

理由は「Python初心者のためのおすすめプログラミングスクール3選」で解説しています。



よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメント一覧 (4件)

    • かのらさんご指摘ありがとうございます。おっしゃる通りですね。
      正しくは、[[-1,-1],[1,0]です。
      本文中に修正文を記載させて頂きます。
      ありがとうございます。

  • 基底の1度目の移動先の後に、2度目の変換を行う時、変換されていない基底を2つ目の行列で変換した時に、1度目の移動先がついていったあとが、最終的な基底の行き先になるところの理解に時間がかかりました。初めは、2度目の変換に、元の基底は関わらないものと思っておりました。1度変換した後の基底を基準に変換するのかと思いました。とてもスッキリしました。ありがとうございます。

  • とてもよく分かりました
    ただ、
    >【練習問題】3次行列の積
    問題では、Aの3列目
    [0]
    [1]
    [2]
    ですが、3列目の計算時、^kの時は、
    [0]
    [-1]
    [2]
    になっています?

A へ返信する コメントをキャンセル

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

目次
閉じる