矩阵乘法(Matrix Multiplication)

两个矩阵按"行×列"规则相乘:A 的每一行与 B 的每一列做点积,结果填入对应位置。本质就是把点积从"一对一"升级为"多对多"的批量运算。

核心公式

📖 符号说明

符号含义说明取值范围
左矩阵m×n 矩阵m 行 n 列
右矩阵n×p 矩阵n 行 p 列
结果矩阵m×p 矩阵m 行 p 列
结果的第 i 行第 j 列等于 A 的第 i 行与 B 的第 j 列的点积
求和下标从 1 到 n 遍历,完成一次点积

🔢 分步计算

  1. 1

    取 A 的第 i 行中第 k 个元素

  2. 2

    取 B 的第 j 列中第 k 个元素

  3. 3

    对应位置相乘

  4. 4

    把所有乘积加起来——就是一次点积

前置知识

矩阵乘法(Matrix Multiplication)

直觉理解

想象食堂午餐场景:

米饭(碗)鸡腿(个)青菜(份)
小明211
小红102

这是一个 2×3 的"点菜矩阵" A——2 个人,3 种菜。

热量(千卡)蛋白质(克)
米饭2004
鸡腿28025
青菜302

这是一个 3×2 的"营养矩阵" B——3 种菜,2 种营养素。

现在你想知道每个人摄入了多少热量和蛋白质。怎么算?

  • 小明的热量 = 2×200 + 1×280 + 1×30 = 710 千卡
  • 小明的蛋白质 = 2×4 + 1×25 + 1×2 = 35 克
  • 小红的热量 = 1×200 + 0×280 + 2×30 = 260 千卡
  • 小红的蛋白质 = 1×4 + 0×25 + 2×2 = 8 克

每一行的计算过程,其实就是一次点积。把所有人、所有营养素一起算,就得到结果矩阵 C(2×2):

热量蛋白质
小明71035
小红2608

这就是矩阵乘法——A 的每一行与 B 的每一列做点积,结果填入对应位置

公式定义

矩阵 AAAm×nm \times nm×n)乘以矩阵 BBBn×pn \times pn×p),得到矩阵 CCCm×pm \times pm×p):

Cij=k=1nAikBkjC_{ij} = \sum_{k=1}^{n} A_{ik} \cdot B_{kj}Cij=k=1nAikBkj

用一句话读这个公式:结果矩阵第 i 行第 j 列的数 = 左矩阵第 i 行 · 右矩阵第 j 列(做点积)

维度匹配规则

矩阵乘法有一个必须满足的条件:A 的列数必须等于 B 的行数

Am×nBn×p=Cm×pA_{m \times \boxed{n}} \cdot B_{\boxed{n} \times p} = C_{m \times p}Am×nBn×p=Cm×p

回到食堂的例子:点菜矩阵有 3 列(3 种菜),营养矩阵有 3 行(3 种菜的营养)——这个"3"必须对上,否则乘法没有意义。

一个好记的口诀:消内留外——中间的 n 在计算中被"消掉"了(求和),留下的外侧 m 和 p 决定结果的形状。

不满足交换律

矩阵乘法一般不满足交换律A×BB×AA \times B \neq B \times AA×B=B×A

这和普通数字乘法不一样。原因很直观:A×BA \times BA×B 是"A 的行配 B 的列",反过来 B×AB \times AB×A 是"B 的行配 A 的列"——配对的对象都变了,结果当然不同。甚至可能一个方向能乘,反过来维度就对不上,根本不能乘。

动手试试

点击结果矩阵中的任意格子,观察它由左矩阵的哪一行和上矩阵的哪一列做点积得到。高亮的行和列就是参与计算的向量。

矩阵乘法:批量点积

与点积的关系

操作输入输出本质
点积两个向量一个标量一次"对应相乘再求和"
矩阵乘法两个矩阵一个矩阵批量点积

矩阵乘法 = 把点积从"一对一"扩展到"多对多"。理解了点积,矩阵乘法只是规模的放大。

这在机器学习中用来做什么

机器学习的核心运算几乎都是矩阵乘法:一批数据同时通过一层网络、一组向量同时计算两两相似度……矩阵乘法让这些本质是"重复做点积"的操作可以一步完成,也是 GPU 能大幅加速深度学习的根本原因。

引用本概念的文章