回 6-2 分野 6 ベクトルと行列
行列の
読み終えたら行列の
この頁の流れ
行列の
行列の 積は、 なぜ 「行 × 列」で 計算するのか
行列の
けれど、
この
行列と、 積のやり方
行列は数の表
行列は、
高校の
積の 1 つの 数は、 行と列の内積
A と
2×2 の
| 成分 | A の | 計算 | 値 |
|---|---|---|---|
| (1, 1) | 行 (1, 2)、 | 1 × 5 + 2 × 7 | 19 |
| (1, 2) | 行 (1, 2)、 | 1 × 6 + 2 × 8 | 22 |
| (2, 1) | 行 (3, 4)、 | 3 × 5 + 4 × 7 | 43 |
| (2, 2) | 行 (3, 4)、 | 3 × 6 + 4 × 8 | 50 |
AB = [[19, 22], [43, 50]] です。
積が 作れる 大きさの決まり
行と
| A | B | AB |
|---|---|---|
| m 行 n 列 | n 行 p 列 | m 行 p 列 |
| 2×3 | 3×2 | 2×2 |
| 3×2 | 2×3 | 3×3 |
| 2×3 | 2×3 | 作れない |
内側の 2 つの数 (n と
掛け算の 回数は m × n × p
AB の
AB と BA は、 一般には違う
数の
一方、
| 性質 | 式 |
|---|---|
| 結合法則 | (AB)C = A(BC) |
| 分配法則 | A(B + C) = AB + AC |
| 単位行列 | AI = IA = A |
単位行列 I は、
なぜこの 決め方なのか
行列は
成分ごとの 積とは違う
同じ* が@ が
動かして確かめる
1 本目は、
動かす 3 重ループで行列の積
▶ 実行ボタンを押すと結果がここに表示されます
実行すると、次の通りに出ます
[19, 22]
[43, 50]
掛け算 8 回
[7, 8]
[16, 17]
掛け算 12 回
[1, 2, 3]
[4, 5, 6]
[10, 14, 18]
掛け算 18 回
[5, 2, 2]
[0, 1, 1]
[5, 6, 1]
掛け算 27 回
作れない 3 22×2 どうしの
2 本目は、
動かす 掛け算の回数を数える
▶ 実行ボタンを押すと結果がここに表示されます
実行すると、次の通りに出ます
1 1 True
2 8 True
4 64 True
8 512 True
16 4096 True
32 32768 Truen が
3 本目は、
動かす 順、単位行列、ニューラルネットの 1 層
▶ 実行ボタンを押すと結果がここに表示されます
実行すると、次の通りに出ます
AB [[2, 1], [4, 3]]
BA [[3, 4], [1, 2]]
AI [[1, 2], [3, 4]]
1 層 [4.6, 0]B = [[0, 1], [1, 0]] は
最後の 4 行は、入力 3 つ、出力 2 つの小さな
4 本目は、3 つの行列を
動かす 掛ける順で回数が変わる
▶ 実行ボタンを押すと結果がここに表示されます
実行すると、次の通りに出ます
(AB)C 7500
A(BC) 75000
倍 1010×100、
定義どおりに 計算すると外れる所
大きさの 取り 違えは、 止まらない ことがある
2×2 どうしや
n³ より 速い 計算の 仕方もある
定義どおりの
小数の 積は、 足す順で 末尾が変わる
小数の
仕事で どう使うか
行列の
- ニューラルネット。1 つの層は
「重みの 行列 × 入力」に 定数を 足して、活性化の関数を通す計算。 何枚もの 入力を まとめて 行列にし、1 回の積で 一度に計算する - 生成 AI の
手間の 見積もり。 模型の 大きさと 入力の 長さから、 行列の 積の 掛け算の 回数を 出すと、 必要な 計算の 量の 当たりが付く - 画像と
3D の 変換。 回転、 拡大、 移動を 行列で 表し、 続けて 行う変換を 1 つの行列に まとめてから、 たくさんの 点に掛ける - 推薦。
利用者 × 商品の 表を、小さな 2 つの行列の 積で 近づけて、 空いた 所 (まだ 買っていない 商品) の 数を予想する - グラフ。
つながりの 表 (隣接行列、 6-3) を 2 回掛けると、2 歩で行ける 道の 数が分かる
よくある問い
行列の 積は どうやって 計算しますか
答えの
行列の 積が 作れないのは どんな ときですか
左の
AB と BA は いつ等しくなりますか
一般には
Python で 行列の 積を 計算するには
標準の Python だけなら、@ を
確認クイズ
答えだと
1 問目
A = [[2, 0], [1, 3]]、
2 問目
A が 4 行 3 列、B が 3 行 5 列です。
3 問目
この
A = [[1, 2], [3, 4]]
B = [[1, 0], [0, 2]]
print([[sum(a * b for a, b
in zip(r, c))
for c in zip(*B)]
for r in A])説明課題
「n 行 n 列の 2 つの行列の
自分の
この回の 先の一歩
行列の
もっと深く
この
一次資料
どれも 2026年10月30日に開いて、
- PEP 465 A dedicated infix operator for matrix multiplication (Python、英語)。行列の
積の演算子 @を足した 提案。 NumPy では *が成分ごとの 積で、 行列の 積と 分けるために @を設けたこと - numpy.matmul (NumPy 公式文書、英語)。
@がmatmulと同じである こと、 大きさが そろわないと ValueError になること - Strassen, Gaussian elimination is not optimal (Numerische Mathematik 13, 1969)。2×2 の積を 7 回の掛け算で
作り、 n 行 n 列の 積を n³ より 少ない 手間で 計算する 方法。 本文は 有料で、 題と 書誌と 要旨だけを確かめた - Linear algebra (numpy.linalg) (NumPy 公式文書、英語)。NumPy の
行列の 計算は、 BLAS と LAPACK を 使って 速い 計算を 行っている こと (掛け算の 回数を どう 抑えるかまでは、 この 文書には 書かれていない) - 高等学校学習指導要領 (平成 30 年告示) 解説 数学編 理数編 (文部
科学省、PDF) 。数学 C の「数学的な 表現の 工夫」で、 離散グラフや 行列などの 表現を扱うこと - Built-in Functions zip (Python 公式文書、英語)。
zip(*B)で行列の 列を 順に 取り出す 書き方に使う zip
次へ
分野 6 ベクトルと行列の回
- 6-1ベクトルと内積長さ、
内積、 コサイン類似度頁で読む - 6-2行列と行列の積積の
数え方、 計算量 n^3この回 - 6-3グラフと隣接行列頂点、
辺、 次数、 隣接リスト頁で読む