定义
(AB)ij=k=1∑nAikBkj(AB)_{ij}=\sum_{k=1}^{n}A_{ik}B_{kj}
读法:(AB)ij(AB)_{ij} 是 AA 的第 ii 行与 BB 的第 jj 列做点积。第一个下标 ii 来自 AA,决定行;第二个下标 jj 来自 BB,决定列;kk 是被求和掉的“中间维度”,AA 的列数 == BB 的行数 =n=n。
记忆方式:下标 ikik、kjkj 首尾相接,kk 在中间相遇后消失,留下 ijij。
点积视角:把 AA 的第 ii 行看成一个行向量 ai=(Ai1,Ai2,…,Ain)a_i=(A_{i1},A_{i2},\dots,A_{in}),把 BB 的第 jj 列看成一个列向量 bj=(B1j,B2j,…,Bnj)b_j=(B_{1j},B_{2j},\dots,B_{nj}),那么
(AB)ij=ai⋅bj=k=1∑nAikBkj(AB)_{ij}=a_i\cdot b_j=\sum_{k=1}^{n}A_{ik}B_{kj}
∑k\sum_k 就是点积的展开:两个长度为 nn 的向量,对应位置相乘再加起来。kk 是“第几个分量”。所以 ∑k=12AikBki\sum_{k=1}^{2}A_{ik}B_{ki} 读作:AA 的第 ii 行向量与 BB 的第 ii 列向量做点积,两个向量各有 2 个分量。
行、列的记号(这套题用 NumPy 写法):NumPy 里 A[1, :] 是 AA 的第 2 行,B[:, 0] 是 BB 的第 1 列。方括号里逗号前管行、逗号后管列,冒号表示这一维全取,索引从 0 数。只写一个索引 A[1] 默认取行。
A[1, :] # A 的第 2 行,也可写 A[1]
B[:, 0] # B 的第 1 列
A[1] @ B[:, 0] # 一个数,等于 (A @ B)[1, 0]
(A @ B)[1, 0] # 数学上的 (AB)_{21}
数学课本的对应记号是 A2,:A_{2,:}、B:,1B_{:,1}(从 1 数),也有人写 row(A,2)\operatorname{row}(A,2)、a2a_2。填空时两套都接受,但各自的起始不能混:A2,:A_{2,:} 和 A[1, :] 是同一行,A[2, :] 是第 3 行。
于是 (AB)ij=Ai,:⋅B:,j(AB)_{ij}=A_{i,:}\cdot B_{:,j},NumPy 写 (A @ B)[i-1, j-1] == A[i-1] @ B[:, j-1]。下标 ii 落在 AA 的行位,jj 落在 BB 的列位。
题目
第 1 到 4 题和第 7 题里,AA 是 3×23\times2,BB 是 2×42\times4。第 5、6 题把 BB 换成 2×32\times3,这样 ABAB 和 BABA 才都是方阵,迹才有定义。
1. 形状与中间维度
ABAB 是几乘几?kk 从 1 跑到几?
- 2×22\times2,kk 到 3
- 3×43\times4,kk 到 3
- 3×43\times4,kk 到 2
- 4×34\times3,kk 到 2
解析
外形取 AA 的行数和 BB 的列数:3×43\times4。kk 跑的是中间维度,AA 有 2 列、BB 有 2 行,所以到 2。选 B 的人把中间维度和 AA 的行数搞混了。
2. 展开 (AB)31(AB)_{31}
(AB)31(AB)_{31} 等于哪一个?
- A31B11+A32B21A_{31}B_{11}+A_{32}B_{21}
- A13B11+A23B21A_{13}B_{11}+A_{23}B_{21}
- A11B31+A21B32A_{11}B_{31}+A_{21}B_{32}
- A31B11+A31B21A_{31}B_{11}+A_{31}B_{21}
解析
AA 的第 3 行是 (A31,A32)(A_{31},A_{32}),BB 的第 1 列是 (B11,B21)(B_{11},B_{21}),点积得 A。
B 把 AA 的行下标写到了第二位,取的是 AA 的第 3 列,但 AA 只有 2 列。
C 用了 BB 的第 3 行,BB 只有 2 行。
D 的 AA 下标没有随 kk 变,不是点积。
3. 展开 (AB)24(AB)_{24}
- A21B41+A22B42A_{21}B_{41}+A_{22}B_{42}
- A21B14+A22B24A_{21}B_{14}+A_{22}B_{24}
- A12B41+A22B42A_{12}B_{41}+A_{22}B_{42}
- A24B11+A24B21A_{24}B_{11}+A_{24}B_{21}
解析
AA 的第 2 行 (A21,A22)(A_{21},A_{22}) 点 BB 的第 4 列 (B14,B24)(B_{14},B_{24})。BB 的列下标 4 要写在第二位。A 和 C 把 4 写到了 BB 的行位置,BB 没有第 4 行。
4. 对角线元素
(AB)ii(AB)_{ii} 用的是什么和什么做点积?
- AA 的第 ii 行,BB 的第 ii 列
- AA 的第 ii 列,BB 的第 ii 行
- AA 的第 ii 行,BB 的第 ii 行
- 不做点积,就是 AiiBiiA_{ii}B_{ii}
解析
对角线只是定义里把 jj 换成 ii,读法不变:(AB)ii=∑kAikBki(AB)_{ii}=\sum_{k}A_{ik}B_{ki},AA 取行、BB 取列。D 是最常见的错觉,(AB)ii(AB)_{ii} 是一个和,不是单项乘积。
5. 迹的双重求和
这一题 AA 是 3×23\times2,BB 是 2×32\times3。tr(AB)\operatorname{tr}(AB) 展开成双重求和,范围是哪一个?
- ∑i=13∑k=12AikBki\sum_{i=1}^{3}\sum_{k=1}^{2}A_{ik}B_{ki}
- ∑i=12∑k=13AikBki\sum_{i=1}^{2}\sum_{k=1}^{3}A_{ik}B_{ki}
- ∑i=13∑k=13AikBki\sum_{i=1}^{3}\sum_{k=1}^{3}A_{ik}B_{ki}
- ∑i=12∑k=12AikBki\sum_{i=1}^{2}\sum_{k=1}^{2}A_{ik}B_{ki}
解析
外层 ii 跑对角线,ABAB 是 (3×2)(2×3)=3×3(3\times2)(2\times3)=3\times3,所以到 3;内层 kk 跑中间维度,到 2。两个范围来自不同的地方,不能都写成 3 或都写成 2。顺带一提,原来 BB 是 2×42\times4 时 ABAB 是 3×43\times4,不是方阵,迹没有定义。
6. 换成 BABA
仍取 AA 是 3×23\times2,BB 是 2×32\times3。(原来的 BB 是 2×42\times4 时,BB 有 4 列、AA 有 3 行,BABA 乘不了。)
BABA 是几乘几?
写出 (BA)jj(BA)_{jj} 的 ∑\sum 形式,注意求和变量跑的范围变了。
解析
BABA 是 (2×3)(3×2)=2×2(2\times3)(3\times2)=2\times2。能相乘的条件是 BB 的列数等于 AA 的行数,这里都是 3。
BABA 里 BB 在左,取 BB 的第 jj 行 BjiB_{ji};AA 在右,取 AA 的第 jj 列 AijA_{ij}。中间维度是 BB 的列数 =A=A 的行数 =3=3,所以
(BA)jj=i=1∑3BjiAij(BA)_{jj}=\sum_{i=1}^{3}B_{ji}A_{ij}
求和变量叫 ii 还是 kk 无所谓,两个因子先后顺序也无所谓(标量可交换),但范围必须是 3,行列下标不能反。
7. 判断
∑kAikBki\sum_{k}A_{ik}B_{ki} 是谁的对角元?
- (AB)ii(AB)_{ii}
- (BA)ii(BA)_{ii}
- 两者都是,因为 tr(AB)=tr(BA)\operatorname{tr}(AB)=\operatorname{tr}(BA)
- (ATB)ii(A^{\mathsf T}B)_{ii}
解析
看第一个因子 AikA_{ik}:第一个下标是 ii,取的是 AA 的第 ii 行,所以 AA 在左,是 (AB)ii(AB)_{ii}。(BA)ii(BA)_{ii} 会写成 ∑kBikAki\sum_k B_{ik}A_{ki}。
C 混淆了两件事:迹相等是求和之后的标量相等,单个对角元 (AB)ii(AB)_{ii} 和 (BA)ii(BA)_{ii} 一般不相等。在本题的形状下(BB 是 2×42\times4,AA 是 3×23\times2)BABA 甚至没有定义;换成第 5、6 题的形状,ABAB 是 3×33\times3、BABA 是 2×22\times2,ii 的范围也不同。
8. 数值题 (一)
A=(1324)A=\begin{pmatrix}1&2\\3&4\end{pmatrix},B=(0110)B=\begin{pmatrix}0&1\\1&0\end{pmatrix}。先说出 (AB)12(AB)_{12} 用的是 AA 的哪一行、BB 的哪一列,再算出数值填在下面。
解析
AA 的第 1 行 (1,2)(1,2) 点 BB 的第 2 列 (1,0)(1,0):1⋅1+2⋅0=11\cdot1+2\cdot0=1。
算出 3 的人用了 BB 的第 2 行 (1,0)(1,0) 点 AA 的第 1 列 (1,3)(1,3),那是 (BA)21(BA)_{21}。
9. 数值题 (二)
同上 AA、BB。tr(AB)\operatorname{tr}(AB) 和 tr(BA)\operatorname{tr}(BA) 分别是?
- 55 和 66
- 55 和 55
- 44 和 44
- 1010 和 1010
解析
AB=(2413)AB=\begin{pmatrix}2&1\\4&3\end{pmatrix},tr(AB)=2+3=5\operatorname{tr}(AB)=2+3=5。
BA=(3142)BA=\begin{pmatrix}3&4\\1&2\end{pmatrix},tr(BA)=3+2=5\operatorname{tr}(BA)=3+2=5。
两个矩阵不同,迹相同。1010 是 tr(A)⋅tr(B)\operatorname{tr}(A)\cdot\operatorname{tr}(B) 之类的误算,迹对乘法不是同态。
10. 语义题
∑k=12AikBki\sum_{k=1}^{2}A_{ik}B_{ki} 用向量的语言说,是什么?
- AA 的第 ii 行向量 (Ai1,Ai2)(A_{i1},A_{i2}) 与 BB 的第 ii 列向量 (B1i,B2i)(B_{1i},B_{2i}) 的点积
- AA 的第 ii 列向量与 BB 的第 ii 行向量的点积
- AA 的第 ii 行向量与 BB 的第 ii 行向量的点积
- AA 的第 ii 行向量的长度乘 BB 的第 ii 列向量的长度
解析
kk 跑的是向量的分量编号。AikA_{ik} 里 ii 固定、kk 变,取的是第 ii 行横着走;BkiB_{ki} 里 kk 变、ii 固定,取的是第 ii 列竖着走。对应分量相乘再求和,就是点积。
D 是 ∥ai∥∥bi∥\|a_i\|\,\|b_i\|,点积等于它再乘夹角余弦,只有两向量同向时才相等。
11. 数值题 (三)
A=(1324)A=\begin{pmatrix}1&2\\3&4\end{pmatrix},B=(0110)B=\begin{pmatrix}0&1\\1&0\end{pmatrix}。把 (AB)21(AB)_{21} 拆成点积,分两层填:先用 NumPy 记法指出取的是哪一行、哪一列(从 0 数,符号栏有 [□, :] 和 [:, □] 键),再写出具体数值。
行向量的记法:
行向量的数值,写成 (x,y)(x,y):
列向量的记法:
列向量的数值,写成 (x,y)(x,y):
点积结果:
解析
(AB)21(AB)_{21}:第一个下标 2 落在 AA 的行位,是 AA 的第 2 行,NumPy 索引 1,写 A[1, :],数值 (3,4)(3,4);第二个下标 1 落在 BB 的列位,是 BB 的第 1 列,NumPy 索引 0,写 B[:, 0],数值 (0,1)(0,1)。
(AB)21=3⋅0+4⋅1=4(AB)_{21}=3\cdot0+4\cdot1=4
A[1] @ B[:, 0] # 4
(A @ B)[1, 0] # 4
对照第 9 题的 AB=(2413)AB=\begin{pmatrix}2&1\\4&3\end{pmatrix},左下角正是 4。
常见错法:写 A[2, :] 是把数学下标直接搬进 NumPy,那是第 3 行,越界;填 (1,3)(1,3) 是取了 AA 的第 1 列;a2 没有下划线,在 LaTeX 里是两个并列符号,要写 a_2。
12. NumPy 与数学下标
(A @ B)[1, 0] 对应数学上的哪个元素?
- (AB)10(AB)_{10}
- (AB)21(AB)_{21}
- (AB)12(AB)_{12}
- (BA)21(BA)_{21}
解析
NumPy 从 0 数,数学从 1 数,两个索引各加一:[1, 0] 是第 2 行第 1 列,(AB)21(AB)_{21}。
A 直接照搬数字;C 把行列反了;D 把 A @ B 读成了 BABA,@ 的左右顺序就是矩阵乘法的顺序。
在 Mathlib 里
这一步就是 Matrix.mul_apply:
theorem Matrix.mul_apply : (M * N) i k = ∑ j, M i j * N j k
Mathlib 用 j 当中间变量、k 当列下标,字母和课本不同,形状一样:左因子的第二个下标和右因子的第一个下标相同,被求和掉。对迹做推导时 i = k,Lean 会自动统一。trace_transpose_mul 的证明只写了 Finset.sum_comm,是因为 trace 和 * 按定义展开(mul_apply)是定义性相等,rfl 级别,不需要显式引用。
相关阅读:Linear Algebra - Trace。