行列の掛け算のやり方|計算手順・型の条件・交換法則が成り立たない理由
行列の積は、左の行と右の列を向き合わせ、掛けて足すことで作ります。
足し算と違い、掛け算では 2 つの行列が同じ型である必要はありません。そのかわり、左の列の本数と右の行の本数がそろっていなければ計算できません。
そして順序を入れ替えると、値が変わるどころか型まで変わります。数の掛け算といちばん違うのがこの点です。
積が計算できる条件
を 行 列、 を 行 列とします。 が計算できるのは のとき、つまり の列の本数と の行の本数が一致するときだけです。
そのとき結果は 行 列になります。並べて書くと、内側がそろって消え、外側が残る形です。
<svg viewBox="0 0 460 200" width="100%" style="max-width:460px;display:block;margin:0 auto">
<text x="230" y="18" font-size="11" fill="#9a9a9a" text-anchor="middle">内側の数がそろえば掛けられ、外側の数が結果の型になります</text>
<line x1="60" y1="62" x2="60" y2="52" stroke="#1b81e0" stroke-width="1"></line>
<line x1="60" y1="52" x2="420" y2="52" stroke="#1b81e0" stroke-width="1"></line>
<line x1="420" y1="52" x2="420" y2="62" stroke="#1b81e0" stroke-width="1"></line>
<text x="240" y="46" font-size="11" fill="#1b81e0" text-anchor="middle">外側が残る</text>
<rect x="40" y="70" width="110" height="48" fill="#f5f5f5" stroke="#c8c8c8" stroke-width="1"></rect>
<rect x="175" y="70" width="110" height="48" fill="#f5f5f5" stroke="#c8c8c8" stroke-width="1"></rect>
<rect x="330" y="70" width="110" height="48" fill="#1b81e0" fill-opacity="0.12" stroke="#1b81e0" stroke-width="1"></rect>
<text x="95" y="88" font-size="12" fill="#1f1f1f" text-anchor="middle">A</text>
<text x="95" y="107" font-size="11" fill="#9a9a9a" text-anchor="middle">m 行 n 列</text>
<text x="230" y="88" font-size="12" fill="#1f1f1f" text-anchor="middle">B</text>
<text x="230" y="107" font-size="11" fill="#9a9a9a" text-anchor="middle">n 行 q 列</text>
<text x="385" y="88" font-size="12" fill="#1b81e0" text-anchor="middle">AB</text>
<text x="385" y="107" font-size="11" fill="#1b81e0" text-anchor="middle">m 行 q 列</text>
<text x="307" y="98" font-size="13" fill="#9a9a9a" text-anchor="middle">=</text>
<line x1="120" y1="126" x2="120" y2="136" stroke="#d0562a" stroke-width="1"></line>
<line x1="120" y1="136" x2="205" y2="136" stroke="#d0562a" stroke-width="1"></line>
<line x1="205" y1="136" x2="205" y2="126" stroke="#d0562a" stroke-width="1"></line>
<text x="162" y="154" font-size="11" fill="#d0562a" text-anchor="middle">内側がそろう</text>
<text x="230" y="186" font-size="11" fill="#9a9a9a" text-anchor="middle">そろっていなければ、そもそも積が定義できません</text>
</svg>足し算のほうは事情が違い、型が完全に一致していなければ計算できません。掛け算のほうがゆるい条件になっています。
計算を始める前に、まずこの型の確認をします。ここを飛ばすと、途中まで計算してから成り立たないことに気づくはめになります。
成分の公式
の 成分は、 の第 行と の第 列を先頭から順に掛け合わせ、すべて足したものです。
和の記号でまとめると 1 行に収まります。
動いている添字は です。 では列の向き、 では行の向きに走ります。この 2 つの本数がそろっているからこそ、最後まで対応がつきます。
行と列を向き合わせる
手を動かすときは、 を横に読み、 を縦に読みます。行の番号が結果の行番号を、列の番号が結果の列番号を決めます。
<svg viewBox="0 0 460 240" width="100%" style="max-width:460px;display:block;margin:0 auto">
<text x="230" y="18" font-size="11" fill="#9a9a9a" text-anchor="middle">左の行と上の列が交わる場所に、その成分が決まります</text>
<rect x="150" y="175" width="105" height="35" fill="#1b81e0" fill-opacity="0.15"></rect>
<rect x="265" y="25" width="35" height="105" fill="#d0562a" fill-opacity="0.15"></rect>
<rect x="265" y="175" width="35" height="35" fill="#1b81e0" fill-opacity="0.32"></rect>
<rect x="265" y="25" width="70" height="105" fill="none" stroke="#c8c8c8" stroke-width="1"></rect>
<line x1="300" y1="25" x2="300" y2="130" stroke="#c8c8c8" stroke-width="1"></line>
<line x1="265" y1="60" x2="335" y2="60" stroke="#c8c8c8" stroke-width="1"></line>
<line x1="265" y1="95" x2="335" y2="95" stroke="#c8c8c8" stroke-width="1"></line>
<rect x="150" y="140" width="105" height="70" fill="none" stroke="#c8c8c8" stroke-width="1"></rect>
<line x1="185" y1="140" x2="185" y2="210" stroke="#c8c8c8" stroke-width="1"></line>
<line x1="220" y1="140" x2="220" y2="210" stroke="#c8c8c8" stroke-width="1"></line>
<line x1="150" y1="175" x2="255" y2="175" stroke="#c8c8c8" stroke-width="1"></line>
<rect x="265" y="140" width="70" height="70" fill="none" stroke="#1b81e0" stroke-width="1"></rect>
<line x1="300" y1="140" x2="300" y2="210" stroke="#1b81e0" stroke-width="1"></line>
<line x1="265" y1="175" x2="335" y2="175" stroke="#1b81e0" stroke-width="1"></line>
<text x="300" y="18" font-size="12" fill="#1f1f1f" text-anchor="middle">B</text>
<text x="138" y="180" font-size="12" fill="#1f1f1f" text-anchor="end">A</text>
<text x="348" y="180" font-size="12" fill="#1b81e0" text-anchor="start">AB</text>
<text x="230" y="232" font-size="11" fill="#9a9a9a" text-anchor="middle">A を左、B を上に置くと、交点がそのまま答えの位置になります</text>
</svg>を左、 を上に置いて、交わったところへ答えを書き込む並べ方があります。行と列を目で追いやすく、書き間違いが減ります。
計算する成分は全部で 個あり、そのそれぞれに 回の掛け算がいります。
例:2 行 3 列と 3 行 2 列を掛ける
冒頭の 2 つで手順をたどります。
の列が 3 本、 の行が 3 本でそろっています。結果は 2 行 2 列です。
成分は、 の第 1 行 と の第 1 列 から出ます。 です。
成分は同じ行と第 2 列 で、 になります。
第 2 行についても同様です。、 です。
例:順序を変えると型まで変わる
同じ 2 つを逆に掛けます。 の列が 2 本、 の行が 2 本でそろうので、こちらも計算できます。
結果は の行数と の列数から、3 行 3 列になります。
は 2 次、 は 3 次です。値を見比べる以前に、大きさからして別物になりました。
例:片方の順序でしか掛けられない
を 2 行 3 列、 を 3 行 4 列とします。 は内側の 3 がそろうので計算でき、2 行 4 列になります。
のほうは、 の列が 4 本、 の行が 2 本です。一致しないので計算できません。
が書けたからといって も書ける、とは限らないわけです。
なぜこの定義なのか
成分どうしを掛けるほうが素直に見えます。それでもこの定義を採るのは、変換を続けて施す操作がこの形になるからです。
に を掛けて を得て、 に を掛けて を得るとします。
を下の式へ代入し、和の順序を入れ替えて でくくります。
括弧の中は、まさに の式です。 から へ一気に送る行列が だ、ということになります。
が左に書かれているのに が先に働くのは、 という順で読むからです。書く順と働く順が逆になる点に注意します。
列で見ると何をしているか
の列を と書きます。 に列ベクトル を掛けたものは、これらを の成分で定数倍して足したものです。
行で計算しても列で計算しても、着く先は同じです。手計算では行、意味を考えるときは列、と使い分けると見通しがよくなります。
が第 成分だけ のベクトルなら、答えは の第 列そのものです。列を 1 本取り出す操作になっています。
積の列は B の列ごとに決まる
前節を使うと、 の構造が読めます。 の第 列は、 に の第 列を掛けたものです。
つまり は、 を の列 1 本ずつに当て、その結果を横に並べたものにほかなりません。列どうしは互いに干渉しません。
必要な列だけを計算したいときは、そこだけ取り出せます。全部を計算する必要はありません。
行の側からも同じことが言えます。 の第 行は、 の第 行に を掛けたものです。
交換法則は成り立たない
数の掛け算では でした。行列では と が一般に別物になります。
型すら違うことがあるのは、すでに見たとおりです。では正方行列どうしで型がそろっていればよいかというと、そうもいきません。
例:型は合うのに結果が違う
2 次の正方行列を 2 つ用意します。
を計算すると、左上だけが の行列になります。
どちらも 2 次の正方行列ですが、 が現れる位置が違います。順序を入れ替えてよい場面は、むしろ例外だと考えたほうが安全です。
結合法則
順序は動かせませんが、括弧の付け方は自由です。3 つ以上の積では、どこから計算しても結果が変わりません。
証明は成分を書き下すだけです。左辺の 成分は次のようになります。
右辺を同じように展開すると、和を取る順が が外、 が内に変わるだけです。足し合わせる項の集まりは変わりません。
有限個の足し算なので、順序を入れ替えても値は同じです。したがって両辺は一致します。
括弧を省いて と書けるのは、この法則があるからです。ただし並び順そのものは動かせません。
分配法則
足し算との組み合わせも、数のときと同じ形になります。
左からの分配と右からの分配を別々に書くのは、交換法則が使えないためです。数のときは片方から他方が出るので、1 つで済んでいました。
定数倍については が成り立ちます。数はどこへでも動かせます。
単位行列
対角成分がすべて で、ほかが の正方行列を単位行列といい と書きます。
が 行 列なら、左からは 次、右からは 次の単位行列を掛けることになります。どちらの場合も のままです。
数の にあたる役どころです。正方行列でない相手には、左右で違う大きさの単位行列が必要になります。
掛けて零になるのに、どちらも零でない
成分がすべて の行列を零行列といい と書きます。 と は数のときと同じです。
ところが逆向きが崩れます。 も も零行列でないのに、積が零行列になることがあります。
どの行と列を向き合わせても となり、 は零行列です。
数では なら か が でした。行列ではその推論が通りません。
約分ができない
前節の帰結として、両辺から共通の因子を消す操作が使えなくなります。 から は出ません。
移項すれば ですが、 も も零でないままこの式が成り立つ場合があるからです。
に逆行列があるときだけ、左から掛けて が得られます。逆行列を持たない行列では、消す操作そのものが許されません。
べき乗
正方行列は自分自身と掛けられるので、、 と定めます。 は単位行列とします。
同じ行列どうしなら順序を気にしなくてよいので、指数の規則がそのまま通ります。
いっぽう は一般に成り立ちません。展開すると で、真ん中の を に入れ替えられないからです。
が成り立つ組に限れば、この式も使えます。
対角行列を掛けると行や列が定数倍される
対角成分だけが でない行列を対角行列といいます。これを掛けると、結果が目で読めます。
左から掛けると、各行がそれぞれ定数倍されます。
右から掛けると、こんどは各列が定数倍されます。
同じ 2 つの行列でも、左右で結果が違います。交換法則が成り立たないことを、いちばん見やすい形で示した例になっています。
計算の手間
行 列と 行 列の積では、成分が 個あり、そのそれぞれに 回の掛け算がいります。掛け算の総数は 回です。
次の正方行列どうしなら 回になります。大きさが 2 倍になれば手間は 8 倍です。
3 つ以上の積では、括弧の付け方で手間が大きく変わります。結果が同じでも、途中を通る行列の大きさが違うからです。
が 100 行 2 列、 が 2 行 100 列、 が 100 行 1 列だとします。先に を作ると 100 次の正方行列を経由することになり、掛け算はおよそ 3 万回です。
先に を作れば、経由するのは 2 行 1 列の細長い行列で済みます。掛け算は 400 回で終わります。
結合法則が保証するのは結果の一致だけで、手間の一致ではありません。
理解の確認
が 3 行 5 列、 が 5 行 2 列のとき、正しいのはどれでしょうか。
- は 5 行 5 列になり、 も計算できる
- は 3 行 2 列になり、 は計算できない
- も も 3 行 2 列になる












内側の 5 がそろうので AB は計算でき、外側が残って 3 行 2 列です。BA のほうは B の列が 2 本、A の行が 3 本で一致しないため、積そのものが定義できません。計算に入る前に型を確かめる習慣をつけると、この種の取り違えは起きなくなります。