blog / 线性代数 / 2 · 矩阵与线性变换 上一节把数据表示成了向量。本节回答:怎么对一整个空间的向量做统一的操作? 答案是矩阵。理解本节的关键口号是——矩阵就是一个动作 。
一、矩阵(Matrix)是什么
表面上,矩阵是一个数的长方形表格,m × n m \times n m × n 表示 m 行 n 列:
A = [ a 11 a 12 ⋯ a 1 n a 21 a 22 ⋯ a 2 n ⋮ ⋮ ⋱ ⋮ a m 1 a m 2 ⋯ a m n ] \mathbf{A} = \begin{bmatrix} a_{11} & a_{12} & \cdots & a_{1n} \\ a_{21} & a_{22} & \cdots & a_{2n} \\ \vdots & \vdots & \ddots & \vdots \\ a_{m1} & a_{m2} & \cdots & a_{mn} \end{bmatrix} A = a 11 a 21 ⋮ a m 1 a 12 a 22 ⋮ a m 2 ⋯ ⋯ ⋱ ⋯ a 1 n a 2 n ⋮ a mn
但真正重要的是它的第二重身份:一个线性变换 。一个 m × n m \times n m × n 矩阵,是一台把 n 维向量「吃进去」、吐出 m 维向量的机器。
跨领域应用 :神经网络的每一层就是一次矩阵乘法,即一次线性变换,把向量从一个维度空间映射到另一个。前向传播的完整过程就是一系列矩阵变换的串联。(→ 七节·案例一)
二、矩阵的基本运算
矩阵乘法因与变换复合深度绑定,单独放在第五节。其余四种基本运算如下。
2.1 加法与数乘
加法 :两个同型 矩阵(行列数相同)逐元素相加,( A + B ) i j = a i j + b i j (\mathbf{A}+\mathbf{B})_{ij}=a_{ij}+b_{ij} ( A + B ) ij = a ij + b ij 。满足交换律与结合律。
数乘 :标量 c c c 与矩阵逐元素相乘,( c A ) i j = c ⋅ a i j (c\mathbf{A})_{ij}=c\cdot a_{ij} ( c A ) ij = c ⋅ a ij 。
2.2 转置
转置 A ⊤ \mathbf{A}^\top A ⊤ :行列互换,( A ⊤ ) i j = A j i (\mathbf{A}^\top)_{ij}=\mathbf{A}_{ji} ( A ⊤ ) ij = A j i 。在内积、协方差、最小二乘中无处不在;A ⊤ A \mathbf{A}^\top\mathbf{A} A ⊤ A 一定是对称矩阵。运算规律:
( A ⊤ ) ⊤ = A (\mathbf{A}^\top)^\top = \mathbf{A} ( A ⊤ ) ⊤ = A (转两次还原)
( A + B ) ⊤ = A ⊤ + B ⊤ (\mathbf{A}+\mathbf{B})^\top = \mathbf{A}^\top+\mathbf{B}^\top ( A + B ) ⊤ = A ⊤ + B ⊤
( A B ) ⊤ = B ⊤ A ⊤ (\mathbf{AB})^\top = \mathbf{B}^\top\mathbf{A}^\top ( AB ) ⊤ = B ⊤ A ⊤ (顺序反转 ——先做的变换,转置后排到右边)
( A − 1 ) ⊤ = ( A ⊤ ) − 1 (\mathbf{A}^{-1})^\top = (\mathbf{A}^\top)^{-1} ( A − 1 ) ⊤ = ( A ⊤ ) − 1 (A \mathbf{A} A 可逆时)
2.3 外积与投影矩阵
外积 (outer product):列向量 × 行向量,结果是 n × m n\times m n × m 矩阵 。
a b ⊤ = [ a 1 a 2 ⋮ a n ] [ b 1 b 2 ⋯ b m ] = [ a 1 b 1 a 1 b 2 ⋯ a 1 b m a 2 b 1 a 2 b 2 ⋯ a 2 b m ⋮ ⋮ ⋱ ⋮ a n b 1 a n b 2 ⋯ a n b m ] \mathbf{a}\mathbf{b}^\top = \begin{bmatrix}a_1\\a_2\\\vdots\\a_n\end{bmatrix}\begin{bmatrix}b_1 & b_2 & \cdots & b_m\end{bmatrix} = \begin{bmatrix}a_1 b_1 & a_1 b_2 & \cdots & a_1 b_m \\ a_2 b_1 & a_2 b_2 & \cdots & a_2 b_m \\ \vdots & \vdots & \ddots & \vdots \\ a_n b_1 & a_n b_2 & \cdots & a_n b_m\end{bmatrix} a b ⊤ = a 1 a 2 ⋮ a n [ b 1 b 2 ⋯ b m ] = a 1 b 1 a 2 b 1 ⋮ a n b 1 a 1 b 2 a 2 b 2 ⋮ a n b 2 ⋯ ⋯ ⋱ ⋯ a 1 b m a 2 b m ⋮ a n b m
第 i i i 行第 j j j 列元素为 a i b j a_i b_j a i b j 。
与内积(→ 一章·二节)相比:a ⊤ b \mathbf{a}^\top\mathbf{b} a ⊤ b (行×列)压缩为标量;a b ⊤ \mathbf{a}\mathbf{b}^\top a b ⊤ (列×行)展开为矩阵——符号几乎相同,结果维度截然不同。
投影矩阵 :单位方向向量 u ^ \hat{u} u ^ 的外积 u ^ u ^ ⊤ \hat{u}\hat{u}^\top u ^ u ^ ⊤ 就是沿 u ^ \hat{u} u ^ 方向的投影矩阵。
对任意向量 x \mathbf{x} x :
( u ^ u ^ ⊤ ) x = u ^ ( u ^ ⊤ x ) (\hat{u}\hat{u}^\top)\mathbf{x} = \hat{u}\,(\hat{u}^\top\mathbf{x}) ( u ^ u ^ ⊤ ) x = u ^ ( u ^ ⊤ x ) ,u ^ ⊤ x \hat{u}^\top\mathbf{x} u ^ ⊤ x 是投影长度(标量),乘以方向 u ^ \hat{u} u ^ 得到投影向量
对矩阵 X \mathbf{X} X 同理:u ^ u ^ ⊤ X \hat{u}\hat{u}^\top\mathbf{X} u ^ u ^ ⊤ X 将 X \mathbf{X} X 的每一列都投影到 u ^ \hat{u} u ^ 方向上。(→ 七节·案例二推导)
2.4 迹(Trace)
迹 tr ( A ) \text{tr}(\mathbf{A}) tr ( A ) :方阵对角元之和,tr ( A ) = ∑ i a i i \text{tr}(\mathbf{A})=\sum_i a_{ii} tr ( A ) = ∑ i a ii 。关键性质:tr ( A B ) = tr ( B A ) \text{tr}(\mathbf{AB})=\text{tr}(\mathbf{BA}) tr ( AB ) = tr ( BA ) ——即使 A B ≠ B A \mathbf{AB}\neq\mathbf{BA} AB = BA ,迹仍相等。Frobenius 范数 ∥ A ∥ F 2 = tr ( A ⊤ A ) \|\mathbf{A}\|_F^2=\text{tr}(\mathbf{A}^\top\mathbf{A}) ∥ A ∥ F 2 = tr ( A ⊤ A ) 由此而来。
2.5 逆矩阵
逆矩阵 A − 1 \mathbf{A}^{-1} A − 1 :满足 A − 1 A = A A − 1 = I \mathbf{A}^{-1}\mathbf{A}=\mathbf{A}\mathbf{A}^{-1}=\mathbf{I} A − 1 A = A A − 1 = I 的矩阵。几何直觉:A − 1 \mathbf{A}^{-1} A − 1 是「撤销 A \mathbf{A} A 这个变换」的操作。
存在条件 :A \mathbf{A} A 必须是方阵,且 det ( A ) ≠ 0 \det(\mathbf{A})\neq 0 det ( A ) = 0 ——即变换没有把空间压缩到更低维度(行列式将在后续章节详述)。
求逆的两种方法 :
① 伴随矩阵法 (理论推导):A − 1 = a d j ( A ) det ( A ) \mathbf{A}^{-1}=\dfrac{\mathrm{adj}(\mathbf{A})}{\det(\mathbf{A})} A − 1 = det ( A ) adj ( A ) ,用代数余子式构造伴随矩阵再除以行列式。对 2 × 2 2\times2 2 × 2 矩阵 A = [ a b c d ] \mathbf{A}=\begin{bmatrix}a&b\\c&d\end{bmatrix} A = [ a c b d ] ,结果为:
A − 1 = 1 a d − b c [ d − b − c a ] \mathbf{A}^{-1}=\dfrac{1}{ad-bc}\begin{bmatrix}d&-b\\-c&a\end{bmatrix} A − 1 = a d − b c 1 [ d − c − b a ]
理解这个结构即可,无需死记。3 × 3 3\times3 3 × 3 以上计算量急剧增大,不实用。
② 初等行变换法 (实用):构造增广矩阵 [ A ∣ I ] [\mathbf{A}\mid\mathbf{I}] [ A ∣ I ] ,对左侧施加行变换直到化为 I \mathbf{I} I ,右侧自动变为 A − 1 \mathbf{A}^{-1} A − 1 。适用于任意维度,是实际计算的主流方法(详见后续章节方程组部分)。
运算规律 :
( A B ) − 1 = B − 1 A − 1 (\mathbf{AB})^{-1}=\mathbf{B}^{-1}\mathbf{A}^{-1} ( AB ) − 1 = B − 1 A − 1 (顺序反转——撤销「先 B 后 A」,要先撤 A 再撤 B)
( A − 1 ) − 1 = A (\mathbf{A}^{-1})^{-1}=\mathbf{A} ( A − 1 ) − 1 = A
( A ⊤ ) − 1 = ( A − 1 ) ⊤ (\mathbf{A}^\top)^{-1}=(\mathbf{A}^{-1})^\top ( A ⊤ ) − 1 = ( A − 1 ) ⊤
三、矩阵 × 向量 = 变换空间 / 测量输入
3.1 基(Basis)
理解变换之前,先明确坐标系。二维平面默认使用标准基 (standard basis):
e 1 = [ 1 0 ] , e 2 = [ 0 1 ] \mathbf{e}_1 = \begin{bmatrix}1\\0\end{bmatrix},\quad \mathbf{e}_2 = \begin{bmatrix}0\\1\end{bmatrix} e 1 = [ 1 0 ] , e 2 = [ 0 1 ]
任意二维向量都是它们的线性组合——例如 [ 3 2 ] = 3 e 1 + 2 e 2 \begin{bmatrix}3\\2\end{bmatrix} = 3\mathbf{e}_1 + 2\mathbf{e}_2 [ 3 2 ] = 3 e 1 + 2 e 2 ,其中 3 和 2 是该向量在标准基下的坐标 。只要两个向量线性无关 (不共线),就能构成平面的一组合法基;标准基只是最常用的一种。
3.2 列视角——换基:Ax 的本质
A 的每列是标准基变换后的落点——当各列线性无关 时,它们构成一组新基;Ax 就是把 x 的各坐标在这组新基下展开,合成变换后的向量。
为什么叫”换基”?
变换前,x 在标准基下展开:
x = x 1 e 1 + x 2 e 2 \mathbf{x} = x_1 \mathbf{e}_1 + x_2 \mathbf{e}_2 x = x 1 e 1 + x 2 e 2
矩阵 A 把标准基映射到新基(A 的两列):
e 1 → a 1 , e 2 → a 2 \mathbf{e}_1 \to \mathbf{a}_1,\quad \mathbf{e}_2 \to \mathbf{a}_2 e 1 → a 1 , e 2 → a 2
x 的坐标 ( x 1 , x 2 ) (x_1, x_2) ( x 1 , x 2 ) 不变,基换了:
A x = x 1 a 1 + x 2 a 2 \mathbf{A}\mathbf{x} = x_1 \mathbf{a}_1 + x_2 \mathbf{a}_2 Ax = x 1 a 1 + x 2 a 2
核心直觉 :A 做的事不是「移动 x 这个点」,而是「重新定义坐标轴的方向」——数字没动,动的是那把尺子。列向量线性无关时,这就是真正的换基;列向量线性相关时,变换将空间压进更低维的子空间,即降维。
n 维一般形式
A m × n = [ a 11 a 12 ⋯ a 1 n a 21 a 22 ⋯ a 2 n ⋮ ⋮ ⋱ ⋮ a m 1 a m 2 ⋯ a m n ] , x n × 1 = [ x 1 x 2 ⋮ x n ] \mathbf{A}_{m\times n} = \begin{bmatrix} a_{11} & a_{12} & \cdots & a_{1n} \\ a_{21} & a_{22} & \cdots & a_{2n} \\ \vdots & \vdots & \ddots & \vdots \\ a_{m1} & a_{m2} & \cdots & a_{mn} \end{bmatrix},\quad x_{n\times 1} = \begin{bmatrix} x_1 \\ x_2 \\ \vdots \\ x_n \end{bmatrix} A m × n = a 11 a 21 ⋮ a m 1 a 12 a 22 ⋮ a m 2 ⋯ ⋯ ⋱ ⋯ a 1 n a 2 n ⋮ a mn , x n × 1 = x 1 x 2 ⋮ x n
A x = x 1 [ a 11 a 21 ⋮ a m 1 ] + x 2 [ a 12 a 22 ⋮ a m 2 ] + ⋯ + x n [ a 1 n a 2 n ⋮ a m n ] ∈ R m \mathbf{A}\mathbf{x} = x_1\begin{bmatrix}a_{11}\\a_{21}\\\vdots\\a_{m1}\end{bmatrix} + x_2\begin{bmatrix}a_{12}\\a_{22}\\\vdots\\a_{m2}\end{bmatrix} + \cdots + x_n\begin{bmatrix}a_{1n}\\a_{2n}\\\vdots\\a_{mn}\end{bmatrix} \in \mathbb{R}^m Ax = x 1 a 11 a 21 ⋮ a m 1 + x 2 a 12 a 22 ⋮ a m 2 + ⋯ + x n a 1 n a 2 n ⋮ a mn ∈ R m
A 的第 j 列(m×1 向量)被 x j x_j x j 缩放后求和,结果从 n 维变换到 m 维。
变换前,x 在标准基 { e 1 , e 2 , … , e n } \{e_1, e_2, \ldots, e_n\} { e 1 , e 2 , … , e n } 下展开:
x = x 1 e 1 + x 2 e 2 + ⋯ + x n e n \mathbf{x} = x_1 \mathbf{e}_1 + x_2 \mathbf{e}_2 + \cdots + x_n \mathbf{e}_n x = x 1 e 1 + x 2 e 2 + ⋯ + x n e n
A 把每个标准基映射到 A 的对应列(新基,m 维):
e 1 → a 1 , e 2 → a 2 , … , e n → a n \mathbf{e}_1 \to \mathbf{a}_1,\quad \mathbf{e}_2 \to \mathbf{a}_2,\quad \ldots,\quad \mathbf{e}_n \to \mathbf{a}_n e 1 → a 1 , e 2 → a 2 , … , e n → a n
x 的坐标 ( x 1 , x 2 , … , x n ) (x_1, x_2, \ldots, x_n) ( x 1 , x 2 , … , x n ) 不变,基换了:
A x = x 1 a 1 + x 2 a 2 + ⋯ + x n a n ∈ R m \mathbf{A}\mathbf{x} = x_1 \mathbf{a}_1 + x_2 \mathbf{a}_2 + \cdots + x_n \mathbf{a}_n \in \mathbb{R}^m Ax = x 1 a 1 + x 2 a 2 + ⋯ + x n a n ∈ R m
3.3 行视角——批量内积:Ax 的另一种描述
本节大标题「矩阵 × 向量 = 变换空间 / 测量输入」概括了两种视角。3.2 从列视角 展开了前半句——A 的列定义新基,变换空间。本节从行视角 展开后半句:A 的每一行是一个「探测器」,A x A\mathbf{x} A x 的每个分量衡量输入与该探测器的匹配程度。
把 A 按行 切开,第 i i i 行记为 a i ⊤ \mathbf{a}_i^\top a i ⊤ (1 × n 1 \times n 1 × n 行向量),则 A x A\mathbf{x} A x 的第 i i i 个分量为:
( A x ) i = a i ⊤ x = ∑ k = 1 n a i k x k (A\mathbf{x})_i = \mathbf{a}_i^\top \mathbf{x} = \sum_{k=1}^{n} a_{ik}\, x_k ( A x ) i = a i ⊤ x = ∑ k = 1 n a ik x k
这正是内积——A 的第 i i i 行与 x \mathbf{x} x 逐元素相乘再求和。把 m m m 个分量叠在一起:
A x = [ a 1 ⊤ x a 2 ⊤ x ⋮ a m ⊤ x ] A\mathbf{x} = \begin{bmatrix} \mathbf{a}_1^\top \mathbf{x} \\ \mathbf{a}_2^\top \mathbf{x} \\ \vdots \\ \mathbf{a}_m^\top \mathbf{x} \end{bmatrix} A x = a 1 ⊤ x a 2 ⊤ x ⋮ a m ⊤ x
矩阵乘列向量 = m m m 个内积打包成一列。每一行是一个「探测器」,内积衡量 x \mathbf{x} x 与该探测器的匹配程度。
两种视角的对照 :
列视角 (换基):A x = x 1 a 1 + x 2 a 2 + ⋯ A\mathbf{x} = x_1 \mathbf{a}_1 + x_2 \mathbf{a}_2 + \cdots A x = x 1 a 1 + x 2 a 2 + ⋯ — 坐标乘基向量再相加,回答「合成后的向量在哪」
行视角 (内积):( A x ) i = a i ⊤ x (A\mathbf{x})_i = \mathbf{a}_i^\top \mathbf{x} ( A x ) i = a i ⊤ x — 每行跟输入做内积,回答「输入与每行模板有多匹配」
两种视角是同一件事的两面:列视角看到「空间被变换」,行视角看到「输入被测量」——前者改变空间,后者测量输入。更深的统一:A 的列定义了输出空间的结构(怎么合成),A 的行定义了输入空间的测量方式(怎么读数)——同一组数字,竖着读是「造」,横着读是「测」。
神经网络的权重矩阵(→ 七节·案例一)、协方差矩阵、注意力机制中的 Q K ⊤ QK^\top Q K ⊤ ,本质上都是「矩阵的每一行是一个探测器,对输入做内积」这个结构。
这也解释了为什么约定把矩阵写在左边、列向量写在右边:这种写法天然对应「一堆探测器(行)各自测量同一个输入」——如果反过来写成 x ⊤ A \mathbf{x}^\top A x ⊤ A ,含义就变成了「同一个探测器和一堆不同的东西比」,视角完全不同。进一步到矩阵乘矩阵 A B AB A B ,每个元素 c i j c_{ij} c ij 也是一次内积(A 的第 i i i 行 · B 的第 j j j 列)——整个矩阵乘法就是所有行与所有列的两两内积,排成一张表(→ 5.1·视角三)。
跨领域应用 :图形渲染的本质就是矩阵乘向量——每个顶点坐标(x, y)是一个向量,乘以变换矩阵就得到新坐标。旋转、缩放、投影都是换基。而且每个像素的变换彼此独立,天然适合并行。GPU 每帧对数百万顶点并行执行矩阵乘法,才能实时渲染旋转、缩放、3D 投影等效果。(→ 七节·案例二)
四、常见线性变换与雅可比矩阵
4.1 常见变换矩阵
常见变换对应的矩阵:
旋转 θ 角:[ cos θ − sin θ sin θ cos θ ] \begin{bmatrix} \cos\theta & -\sin\theta \\ \sin\theta & \cos\theta \end{bmatrix} [ cos θ sin θ − sin θ cos θ ]
沿 x、y 轴缩放:[ s x 0 0 s y ] \begin{bmatrix} s_x & 0 \\ 0 & s_y \end{bmatrix} [ s x 0 0 s y ]
投影到 x 轴:[ 1 0 0 0 ] \begin{bmatrix} 1 & 0 \\ 0 & 0 \end{bmatrix} [ 1 0 0 0 ]
4.2 雅可比矩阵:推导方法
以上矩阵都可以用同一套方法推导:对变换 T 的每个输出分量分别对各输入变量求偏导、按行排成矩阵,即雅可比矩阵(Jacobian) :
J = [ ∂ T 1 / ∂ x ∂ T 1 / ∂ y ∂ T 2 / ∂ x ∂ T 2 / ∂ y ] J = \begin{bmatrix} \partial T_1/\partial x & \partial T_1/\partial y \\ \partial T_2/\partial x & \partial T_2/\partial y \end{bmatrix} J = [ ∂ T 1 / ∂ x ∂ T 2 / ∂ x ∂ T 1 / ∂ y ∂ T 2 / ∂ y ]
以旋转变换 T ( x , y ) = ( x cos θ − y sin θ , x sin θ + y cos θ ) T(x, y) = (x\cos\theta - y\sin\theta,\; x\sin\theta + y\cos\theta) T ( x , y ) = ( x cos θ − y sin θ , x sin θ + y cos θ ) 为例:
∂ T 1 ∂ x = cos θ , ∂ T 1 ∂ y = − sin θ , ∂ T 2 ∂ x = sin θ , ∂ T 2 ∂ y = cos θ \frac{\partial T_1}{\partial x} = \cos\theta,\quad \frac{\partial T_1}{\partial y} = -\sin\theta,\quad \frac{\partial T_2}{\partial x} = \sin\theta,\quad \frac{\partial T_2}{\partial y} = \cos\theta ∂ x ∂ T 1 = cos θ , ∂ y ∂ T 1 = − sin θ , ∂ x ∂ T 2 = sin θ , ∂ y ∂ T 2 = cos θ
四个偏导按行排列,正好是旋转矩阵。
4.3 线性变换——雅可比全局一致
以一般线性变换 T ( x , y ) = ( a x + b y , c x + d y ) T(x, y) = (ax + by,\; cx + dy) T ( x , y ) = ( a x + b y , c x + d y ) 为例,每个偏导均为常数:
∂ T 1 ∂ x = a , ∂ T 1 ∂ y = b , ∂ T 2 ∂ x = c , ∂ T 2 ∂ y = d \frac{\partial T_1}{\partial x} = a,\quad \frac{\partial T_1}{\partial y} = b,\quad \frac{\partial T_2}{\partial x} = c,\quad \frac{\partial T_2}{\partial y} = d ∂ x ∂ T 1 = a , ∂ y ∂ T 1 = b , ∂ x ∂ T 2 = c , ∂ y ∂ T 2 = d
J = [ a b c d ] J = \begin{bmatrix} a & b \\ c & d \end{bmatrix} J = [ a c b d ] ——无论在哪个点求雅可比,结果都是同一个矩阵。这正是「线性」的含义:输出对输入的响应在全局一致。
4.4 非线性变换——雅可比随点变化
以变换 T ( x , y ) = ( x 2 , y ) T(x, y) = (x^2,\ y) T ( x , y ) = ( x 2 , y ) 为例——把 x 方向按平方「弯曲」,y 方向不动。
计算雅可比:
J = [ ∂ T 1 / ∂ x ∂ T 1 / ∂ y ∂ T 2 / ∂ x ∂ T 2 / ∂ y ] = [ 2 x 0 0 1 ] J = \begin{bmatrix} \partial T_1/\partial x & \partial T_1/\partial y \\ \partial T_2/\partial x & \partial T_2/\partial y \end{bmatrix} = \begin{bmatrix} 2x & 0 \\ 0 & 1 \end{bmatrix} J = [ ∂ T 1 / ∂ x ∂ T 2 / ∂ x ∂ T 1 / ∂ y ∂ T 2 / ∂ y ] = [ 2 x 0 0 1 ]
J 含有 x,在不同点处结果不同:
在 ( 1 , 0 ) (1,\ 0) ( 1 , 0 ) 处:J = [ 2 0 0 1 ] J = \begin{bmatrix} 2 & 0 \\ 0 & 1 \end{bmatrix} J = [ 2 0 0 1 ] (x 方向放大 2 倍)
在 ( 3 , 0 ) (3,\ 0) ( 3 , 0 ) 处:J = [ 6 0 0 1 ] J = \begin{bmatrix} 6 & 0 \\ 0 & 1 \end{bmatrix} J = [ 6 0 0 1 ] (x 方向放大 6 倍)
在 ( − 2 , 0 ) (-2,\ 0) ( − 2 , 0 ) 处:J = [ − 4 0 0 1 ] J = \begin{bmatrix} -4 & 0 \\ 0 & 1 \end{bmatrix} J = [ − 4 0 0 1 ] (x 方向翻转且放大 4 倍)
对比 4.3 节 :线性变换的 Jacobian 是常数(全局一致);非线性变换的 Jacobian 随坐标变化——每个点都有自己的「局部线性近似」,描述在该点极小邻域内空间如何被拉伸或压缩。
五、矩阵乘法 = 变换的复合 / 行列内积排表
前几节我们确立了一个观点:矩阵就是线性变换,它的每一列装着标准基向量的落点,每一行是一个探测器 。顺着这个观点,两个矩阵相乘有三种自然的读法。
C = A B \mathbf{C} = \mathbf{A}\mathbf{B} C = AB 不是数字的机械搬运——整体看是变换的复合,从列看是逐列施以变换,从行看是两两内积排成表。三种视角给出同一个矩阵。
5.1 三种视角
视角一:变换的复合(整体地看)
矩阵的本职是作用在向量上。对 x \mathbf{x} x 先施加 B 得到 B x \mathbf{B}\mathbf{x} Bx ,再施加 A 得到 A ( B x ) \mathbf{A}(\mathbf{B}\mathbf{x}) A ( Bx ) 。我们希望有一个矩阵一步到位:
C x = A ( B x ) \mathbf{C}\mathbf{x} = \mathbf{A}(\mathbf{B}\mathbf{x}) Cx = A ( Bx ) 对所有 x \mathbf{x} x 成立
这个 C 就定义为 AB。所以 AB 的含义是「先 B 后 A」的合成变换。也正因为最先作用于 x \mathbf{x} x 的 B 紧贴着向量写在右边,A B \mathbf{A}\mathbf{B} AB 要从右往左 读。
视角二:逐列施以变换 A(列视角)
定义有了,这个合成矩阵具体怎么算?回到「列」的视角。关键回忆(3.2 节):任何矩阵的第 j 列,就是它作用在第 j 个标准基向量 e j \mathbf{e}_j e j 上的结果。 所以要知道 AB 的第 j 列,只需看它把 e j \mathbf{e}_j e j 送到哪:
( A B ) e j = A ( B e j ) = A b j (\mathbf{A}\mathbf{B})\mathbf{e}_j = \mathbf{A}(\mathbf{B}\mathbf{e}_j) = \mathbf{A}\mathbf{b}_j ( AB ) e j = A ( B e j ) = A b j
其中 b j \mathbf{b}_j b j 正是 B 的第 j 列。把所有列拼起来:
A B = [ A b 1 ∣ A b 2 ∣ ⋯ ∣ A b n ] \mathbf{A}\mathbf{B} = [\mathbf{A}\mathbf{b}_1 \mid \mathbf{A}\mathbf{b}_2 \mid \cdots \mid \mathbf{A}\mathbf{b}_n] AB = [ A b 1 ∣ A b 2 ∣ ⋯ ∣ A b n ]
矩阵乘矩阵 = A 对 B 的每一列逐一施以变换,再把结果拼回去。
视角三:行×列内积排成表(行视角)
3.3 节从行视角理解了矩阵乘向量——A 的每一行与 x \mathbf{x} x 做内积。矩阵乘矩阵只是再进一步:B 有 p 列,A 有 m 行,每对(行, 列)做一次内积,结果排成 m × p m \times p m × p 的表。
c i j = a i ⊤ b j = ∑ k = 1 n a i k b k j c_{ij} = \mathbf{a}_i^\top \mathbf{b}_j = \sum_{k=1}^{n} a_{ik} b_{kj} c ij = a i ⊤ b j = ∑ k = 1 n a ik b k j
A 的第 i i i 行(1 × n 1 \times n 1 × n )与 B 的第 j j j 列(n × 1 n \times 1 n × 1 )做内积,得到标量 c i j c_{ij} c ij 。所有 m × p m \times p m × p 个组合排完,就是 AB。A 的每行是一个探测器,B 的每列是一个被测对象——AB 就是一张「所有探测器测量所有对象」的得分表。
视角三还有另一种等价写法:**AB 的第 i 行 = **a i ⊤ B \mathbf{a}_i^\top B a i ⊤ B ,即 A 的第 i 行(一个 1 × n 1 \times n 1 × n 的行向量)独立地对 B 做一次「行×矩阵」变换——它分别与 B 的每列做内积,产出一整行结果。所以矩阵乘法不仅是「逐列施以变换」(视角二),也可以是「逐行施以变换」——A 的每行作为一个独立的探测器,扫描 B 的所有列,产出一行得分。这与列视角对称:列视角说「B 的每列被 A 整体变换」,行视角说「A 的每行独立扫描 B 的全部列」。
三种视角为何是同一件事
视角一把目光放在任意向量 x \mathbf{x} x 的去向,视角二把它落实到 n 个标准基上——基的去向定了,变换就定了。视角三换到行看:A 的行 i 与 b j \mathbf{b}_j b j 的内积,恰好是 A b j \mathbf{A}\mathbf{b}_j A b j (视角二的结果)的第 i 个分量。一个按列推进(A 变换 B 的每列),一个按行列交叉推进(A 的每行测量 B 的每列),排出来的表一模一样。
维度匹配 :( m × n ) ( n × p ) = ( m × p ) (m \times n)(n \times p) = (m \times p) ( m × n ) ( n × p ) = ( m × p ) ,中间的 n 要相等——A 的每行有 n 个分量,B 的每列也有 n 个分量,内积要求长度匹配。
5.2 为什么不可交换
A B ≠ B A \mathbf{AB} \neq \mathbf{BA} AB = BA 是常态,可交换是例外。
原因:每个变换都会重塑整个空间,第二个变换作用的是已经被第一个变换改造过的空间 ——顺序不同,第二步「看到」的东西完全不同,自然得到不同结果。
以 R(旋转 90°)和 S(x 轴放大 2 倍)为例:先旋转再放大,被拉长的是「转过之后」的横向;先放大再旋转,被转走的是「已经拉长」的横向——两条路径把同一个点送到不同位置(完整数值见七节·案例二)。
满足 A B = B A \mathbf{AB} = \mathbf{BA} AB = BA 的矩阵对,称为可交换矩阵 。常见情形:其中一个是单位矩阵 I、两者都是缩放矩阵、或同一矩阵的不同幂次(如 A 2 \mathbf{A}^2 A 2 与 A 3 \mathbf{A}^3 A 3 )。
虽然不可交换,但结合律 始终成立:( A B ) C = A ( B C ) (\mathbf{AB})\mathbf{C} = \mathbf{A}(\mathbf{BC}) ( AB ) C = A ( BC ) ——因为「先 C 后 B 后 A」的执行顺序固定,无论怎么分组结果都一样。这是矩阵乘法最重要的代数性质之一,也是深度网络能多层串联的理论基础。
分配律 同样成立:A ( B + C ) = A B + A C \mathbf{A}(\mathbf{B}+\mathbf{C}) = \mathbf{AB}+\mathbf{AC} A ( B + C ) = AB + AC ,( A + B ) C = A C + B C (\mathbf{A}+\mathbf{B})\mathbf{C} = \mathbf{AC}+\mathbf{BC} ( A + B ) C = AC + BC ——变换可以「先合并再作用」,也可以「分别作用再相加」,两者等价。结合律管的是嵌套(怎么分组),分配律管的是并联(怎么拆分),两者共同构成矩阵代数的运算骨架。
跨领域应用 :深度网络的前向传播就是矩阵连乘的复合——第 L 层输出 = W L ⋯ W 2 W 1 x W_L \cdots W_2 W_1 x W L ⋯ W 2 W 1 x ,从右往左作用对应数据从输入层逐层流向输出层。Transformer 的注意力机制 softmax ( Q K ⊤ / d k ) V \text{softmax}(QK^\top / \sqrt{d_k})V softmax ( Q K ⊤ / d k ) V 整体也是矩阵乘法串联,GPU 做的正是这些大规模矩阵运算。(→ 七节·案例一)
六、几个关键特殊矩阵
有几类矩阵因为结构特殊、性质特别好,在理论和计算里反复出现。下面仍按「它代表什么变换」来理解它们。
**单位矩阵 **I \mathbf{I} I :对角线为 1,其余为 0。代表「什么都不做」的变换,I x = x \mathbf{I}\mathbf{x} = \mathbf{x} Ix = x 。它是矩阵乘法的单位元(A I = I A = A \mathbf{A}\mathbf{I} = \mathbf{I}\mathbf{A} = \mathbf{A} AI = IA = A ),地位相当于数字里的 1。
**对角矩阵 **D \mathbf{D} D :只有对角线非零。代表「沿各坐标轴独立缩放」——第 i 个对角元就是第 i 个轴的拉伸倍数。它极好算:乘向量只是逐分量缩放,求幂 D k \mathbf{D}^k D k 只需把每个对角元各自 k 次方。把一般矩阵化成这种最好算的形式,正是「对角化」的目标(见第 5 节)。
三角矩阵 :上(或下)三角,另一半全为 0。解线性方程组时可逐步回代、一眼看出行列式(对角元之积),是 LU、QR 等矩阵分解的目标形式(见第 7 节)。
对称矩阵 :A = A ⊤ \mathbf{A} = \mathbf{A}^\top A = A ⊤ 。协方差矩阵、图的邻接矩阵、二次型矩阵常是对称的,性质特别好——一定有 n 个实特征值,且可正交对角化(见第 5 节)。
**正交矩阵 **Q \mathbf{Q} Q :各列两两正交且均为单位长度,等价于 Q ⊤ Q = I \mathbf{Q}^\top\mathbf{Q} = \mathbf{I} Q ⊤ Q = I ,即 Q − 1 = Q ⊤ \mathbf{Q}^{-1} = \mathbf{Q}^\top Q − 1 = Q ⊤ 。它代表「只转不拉」的刚性变换(旋转、反射)——保持长度与夹角不变,求逆只需转置,几乎零成本。
七、跨领域应用案例
以下两个案例来自两个不同领域,展示矩阵变换在真实系统中的直接应用。
案例一:AI / 深度学习 — 神经网络的前向传播
背景 :给网络一张 28×28 的手写数字图片,让它判断写的是 0–9 中哪个数字。全连接网络的核心计算是 z = W x + b z = Wx + b z = W x + b 。
3.3 节说过:W W W 的每一行是一个探测器,z i = w i ⊤ x z_i = \mathbf{w}_i^\top \mathbf{x} z i = w i ⊤ x 衡量输入与该探测器的匹配程度。在神经网络里,这些探测器不是手工设定的,而是从训练数据中学出来的——训练过程就是在寻找「对识别数字最有用的那组探测器」。学成之后,W W W 的每一行就固化成一个特征模板:权重值编码了「关注哪些像素、忽略哪些像素」。比如某一行学到的权重在图片顶部几个像素位置取较大正值,其余为零或负——它就是「顶部横线检测器」,输入「7」时响应强烈,输入「1」时几乎无响应。另一行可能是「右侧竖线检测器」,还有的可能捕捉左下角的弧度。W x W\mathbf{x} W x 一次输出 m m m 个得分,就是 m m m 个模板各自测量的结果。多层串联就把笔画、边缘这些低级特征组合成完整的数字形状。
下面用 MNIST 标准尺寸还原完整流程。
以「顶部横线检测器」为例:数字「7」顶行有笔画经过,内积得分高;数字「1」的笔画只在中间一列,与顶行几乎无重叠,得分接近零。反过来,「中心竖线检测器」对「1」得分远高于「7」——「7」的笔画从右上往左下走,与中心列重叠很少。z = W x \mathbf{z} = W\mathbf{x} z = W x 输出的得分向量就像每个数字的「指纹」,分类器据此区分不同数字。实际网络第一层有 256 个探测器(W 1 W_1 W 1 的 256 行),远不止三个,但原理相同。
数值演算:手写数字「7」的前向传播
输入 :把 28×28 灰度图按行拉平,得到 x ∈ R 784 × 1 \mathbf{x} \in \mathbb{R}^{784 \times 1} x ∈ R 784 × 1 。
第一层 (特征提取):W 1 W_1 W 1 是 256 × 784 256 \times 784 256 × 784 的权重矩阵。计算
z 1 = W 1 x + b 1 ∈ R 256 \mathbf{z}_1 = W_1 \mathbf{x} + \mathbf{b}_1 \in \mathbb{R}^{256} z 1 = W 1 x + b 1 ∈ R 256
W 1 W_1 W 1 的 256 行就是 256 个探测器(3.3 节),各自识别不同笔画模式。经 ReLU 激活后,256 维向量就是这张图片的「特征指纹」。
第二层 (分类打分):W 2 W_2 W 2 是 10 × 256 10 \times 256 10 × 256 的权重矩阵。计算
z 2 = W 2 ReLU ( z 1 ) + b 2 ∈ R 10 \mathbf{z}_2 = W_2 \,\text{ReLU}(\mathbf{z}_1) + \mathbf{b}_2 \in \mathbb{R}^{10} z 2 = W 2 ReLU ( z 1 ) + b 2 ∈ R 10
10 行对应 0–9 十个类别,输出各数字的置信度得分。
预测 :arg max ( z 2 ) \arg\max(\mathbf{z}_2) arg max ( z 2 ) 取得分最高的类别。若第 7 个分量最大 → 预测「7」。
维度变换链:784 → W 1 256 → W 2 10 784 \xrightarrow{W_1} 256 \xrightarrow{W_2} 10 784 W 1 256 W 2 10 。
进阶:为什么需要非线性激活?
5.2 节提到,结合律 ( A B ) C = A ( B C ) (\mathbf{AB})\mathbf{C} = \mathbf{A}(\mathbf{BC}) ( AB ) C = A ( BC ) 是深度网络多层串联的理论基础。但反过来想:如果只有矩阵乘法、没有非线性,会怎样?
z 2 = W 2 ( W 1 x ) = ( W 2 W 1 ) x = W eq x \mathbf{z}_2 = W_2(W_1 \mathbf{x}) = (W_2 W_1)\mathbf{x} = W_{\text{eq}}\mathbf{x} z 2 = W 2 ( W 1 x ) = ( W 2 W 1 ) x = W eq x
两层矩阵乘法的乘积 W 2 W 1 W_2 W_1 W 2 W 1 仍然是一个矩阵——无论叠多少层,都等价于单层线性变换 ,网络无法学到非线性关系。
解决方法是在每层矩阵乘法之后加一个非线性激活函数 ,最常用的是 ReLU:ReLU ( z ) = max ( 0 , z ) \text{ReLU}(z) = \max(0, z) ReLU ( z ) = max ( 0 , z ) 。完整的一层计算变为:
a 1 = ReLU ( W 1 x + b 1 ) \mathbf{a}_1 = \text{ReLU}(W_1 \mathbf{x} + \mathbf{b}_1) a 1 = ReLU ( W 1 x + b 1 )
ReLU 把负值截为 0——这个简单操作打破了线性叠加的封闭性,使多层网络能逼近任意连续函数(万能近似定理)。真正的深度网络计算是:
x → W 1 , ReLU a 1 → W 2 , ReLU a 2 → W 3 输出 \mathbf{x} \xrightarrow{W_1,\,\text{ReLU}} \mathbf{a}_1 \xrightarrow{W_2,\,\text{ReLU}} \mathbf{a}_2 \xrightarrow{W_3} \text{输出} x W 1 , ReLU a 1 W 2 , ReLU a 2 W 3 输出
矩阵乘法负责线性组合,激活函数负责引入非线性——两者交替,构成深度学习的核心计算。
小结 :矩阵乘法把高维原始数据逐层压缩为有意义的低维表示,最终输出对每个类别的置信度得分。神经网络学习的本质,就是找到最有用的线性组合方向——训练出权重矩阵 W W W 的每一行。
案例二:游戏引擎 — 为什么变换顺序不能乱
1. 案例:变换顺序的后果
背景 :3D 游戏引擎(Unity、Unreal)对每个物体固定按「缩放→旋转→平移」顺序执行,并且写死在引擎里。为什么不能调换?以下用 2D 场景还原这个问题。
场景 :角色手持一把剑,初始竖直朝上,剑尖在 ( 0 , 2 ) (0, 2) ( 0 , 2 ) 。目标:将剑拉长到 3 倍、再旋转 45° 斜持。
缩放矩阵 S = ( 1 0 0 3 ) \mathbf{S} = \begin{pmatrix}1 & 0 \\ 0 & 3\end{pmatrix} S = ( 1 0 0 3 ) (纵向×3),旋转矩阵 R ≈ ( 0.71 − 0.71 0.71 0.71 ) \mathbf{R} \approx \begin{pmatrix}0.71 & -0.71 \\ 0.71 & 0.71\end{pmatrix} R ≈ ( 0.71 0.71 − 0.71 0.71 ) (45°)
方案 A(先缩放 S,再旋转 R,整体矩阵 RS)——正确 :
S ⋅ ( 0 2 ) = ( 0 6 ) \mathbf{S} \cdot \begin{pmatrix}0\\2\end{pmatrix} = \begin{pmatrix}0\\6\end{pmatrix} S ⋅ ( 0 2 ) = ( 0 6 ) ——剑变为 6 单位长,仍竖直
R ⋅ ( 0 6 ) ≈ ( − 4.24 4.24 ) \mathbf{R} \cdot \begin{pmatrix}0\\6\end{pmatrix} \approx \begin{pmatrix}-4.24\\4.24\end{pmatrix} R ⋅ ( 0 6 ) ≈ ( − 4.24 4.24 ) ——整把长剑斜持
剑长 = 4.24 2 + 4.24 2 = 6 = \sqrt{4.24^2+4.24^2} = 6 = 4.2 4 2 + 4.2 4 2 = 6 ✓ 形状完整,只是方向改变。
方案 B(先旋转 R,再缩放 S,整体矩阵 SR)——错误 :
R ⋅ ( 0 2 ) ≈ ( − 1.41 1.41 ) \mathbf{R} \cdot \begin{pmatrix}0\\2\end{pmatrix} \approx \begin{pmatrix}-1.41\\1.41\end{pmatrix} R ⋅ ( 0 2 ) ≈ ( − 1.41 1.41 ) ——剑已倾斜,仍 2 单位长
S ⋅ ( − 1.41 1.41 ) = ( − 1.41 4.24 ) \mathbf{S} \cdot \begin{pmatrix}-1.41\\1.41\end{pmatrix} = \begin{pmatrix}-1.41\\4.24\end{pmatrix} S ⋅ ( − 1.41 1.41 ) = ( − 1.41 4.24 ) ——只拉伸了世界坐标 y 轴 分量,x 分量原封不动
剑长 = 1.41 2 + 4.24 2 ≈ 4.5 ≠ 6 = \sqrt{1.41^2+4.24^2} \approx 4.5 \neq 6 = 1.4 1 2 + 4.2 4 2 ≈ 4.5 = 6 ,且剑被拉歪——这不是「长剑斜持」,而是剑的形状变形了。
方案 B 的根本问题:「先旋转后缩放」让缩放作用在世界坐标轴上,而非物体的本地轴上。剑已倾斜 45°之后,S 还是沿世界 y 轴拉,自然把斜剑拉成了形状错误的东西。
小结 :游戏引擎固定「先缩放后旋转」(TRS 中的 S→R),就是为了确保缩放在物体本地坐标系内完成,旋转再把整体搞到目标朝向——符合「先把剑磨长,再斜着拿」的直觉。顺序调换,资产必然变形。
2. 进阶:构造正确矩阵的两种方法
案例二回答的是「顺序错误会怎样」;这里回答另一个问题:若确实需要「沿旋转后的方向拉伸」,有两种等价方法构造正确的 M。
方法一:换基法 M = R S R ⊤ M = \mathbf{R}\mathbf{S}\mathbf{R}^\top M = RS R ⊤
S 只能沿世界 y 轴拉伸。利用正交矩阵 R − 1 = R ⊤ \mathbf{R}^{-1} = \mathbf{R}^\top R − 1 = R ⊤ 这一性质,可先把剑「转回」竖直(乘 R ⊤ \mathbf{R}^\top R ⊤ ),再用 S 拉伸,最后用 R 转回 45°——三步合一,等效于沿剑的本地轴拉伸。
M = R S R ⊤ = ( 0.71 − 0.71 0.71 0.71 ) ( 1 0 0 3 ) ( 0.71 0.71 − 0.71 0.71 ) = ( 2 − 1 − 1 2 ) M = \mathbf{R}\mathbf{S}\mathbf{R}^\top = \begin{pmatrix}0.71&-0.71\\0.71&0.71\end{pmatrix}\begin{pmatrix}1&0\\0&3\end{pmatrix}\begin{pmatrix}0.71&0.71\\-0.71&0.71\end{pmatrix} = \begin{pmatrix}2&-1\\-1&2\end{pmatrix} M = RS R ⊤ = ( 0.71 0.71 − 0.71 0.71 ) ( 1 0 0 3 ) ( 0.71 − 0.71 0.71 0.71 ) = ( 2 − 1 − 1 2 )
方法二:投影公式 M = I + ( k − 1 ) u ^ u ^ ⊤ M = I + (k-1)\hat{u}\hat{u}^\top M = I + ( k − 1 ) u ^ u ^ ⊤
不需要知道目标方向由哪些旋转组成,直接用方向向量 u ^ \hat{u} u ^ 和倍数 k 构造(推导见下方)。
M = I + 2 ( 0.5 − 0.5 − 0.5 0.5 ) = ( 2 − 1 − 1 2 ) M = I + 2\begin{pmatrix}0.5&-0.5\\-0.5&0.5\end{pmatrix} = \begin{pmatrix}2&-1\\-1&2\end{pmatrix} M = I + 2 ( 0.5 − 0.5 − 0.5 0.5 ) = ( 2 − 1 − 1 2 )
两种方法给出同一矩阵。验证:( 2 − 1 − 1 2 ) ( − 1.41 1.41 ) = ( − 4.24 4.24 ) \begin{pmatrix}2&-1\\-1&2\end{pmatrix}\begin{pmatrix}-1.41\\1.41\end{pmatrix} = \begin{pmatrix}-4.24\\4.24\end{pmatrix} ( 2 − 1 − 1 2 ) ( − 1.41 1.41 ) = ( − 4.24 4.24 ) ✓ 剑长 = 6,方向正确。
方法一需要知道目标方向是由哪个 R 产生的;方法二只要知道 u ^ \hat{u} u ^ 和 k,更通用。
3. 数学推导:投影公式 M = I + ( k − 1 ) u ^ u ^ ⊤ M = I + (k-1)\hat{u}\hat{u}^\top M = I + ( k − 1 ) u ^ u ^ ⊤
目标:构造矩阵 M M M ,使 M x M\mathbf{x} M x 沿 u ^ \hat{u} u ^ 拉伸 k k k 倍,垂直方向不变。
1. 投影
根据2.3,x \mathbf{x} x 在 u ^ \hat{u} u ^ 上的投影为( u ^ u ^ ⊤ ) x (\hat{u}\hat{u}^\top)\,\mathbf{x} ( u ^ u ^ ⊤ ) x
**2. 分解 **x \mathbf{x} x
x = u ^ u ^ ⊤ x ⏟ ∥ u ^ + ( I − u ^ u ^ ⊤ ) x ⏟ ⊥ u ^ \mathbf{x} = \underbrace{\hat{u}\hat{u}^\top\mathbf{x}}_{\parallel\,\hat{u}} + \underbrace{(I-\hat{u}\hat{u}^\top)\mathbf{x}}_{\perp\,\hat{u}} x = ∥ u ^ u ^ u ^ ⊤ x + ⊥ u ^ ( I − u ^ u ^ ⊤ ) x
验证:u ^ u ^ ⊤ x + ( I − u ^ u ^ ⊤ ) x = x \hat{u}\hat{u}^\top\mathbf{x} + (I-\hat{u}\hat{u}^\top)\mathbf{x} = \mathbf{x} u ^ u ^ ⊤ x + ( I − u ^ u ^ ⊤ ) x = x ✓
**3. 构造 **M M M
x 已拆成两个正交部分,分别处理:
平行分量 u ^ u ^ ⊤ x \hat{u}\hat{u}^\top\mathbf{x} u ^ u ^ ⊤ x → 拉伸 k k k 倍
垂直分量 ( I − u ^ u ^ ⊤ ) x (I-\hat{u}\hat{u}^\top)\mathbf{x} ( I − u ^ u ^ ⊤ ) x → 保持不变(×1)
M x = k ( u ^ u ^ ⊤ x ) + 1 ⋅ ( I − u ^ u ^ ⊤ ) x M\mathbf{x} = k\,(\hat{u}\hat{u}^\top\mathbf{x}) + 1\cdot(I-\hat{u}\hat{u}^\top)\mathbf{x} M x = k ( u ^ u ^ ⊤ x ) + 1 ⋅ ( I − u ^ u ^ ⊤ ) x
= k u ^ u ^ ⊤ x + x − u ^ u ^ ⊤ x = k\hat{u}\hat{u}^\top\mathbf{x} + \mathbf{x} - \hat{u}\hat{u}^\top\mathbf{x} = k u ^ u ^ ⊤ x + x − u ^ u ^ ⊤ x
= x + ( k − 1 ) u ^ u ^ ⊤ x = \mathbf{x} + (k-1)\hat{u}\hat{u}^\top\mathbf{x} = x + ( k − 1 ) u ^ u ^ ⊤ x
= [ I + ( k − 1 ) u ^ u ^ ⊤ ] x = \bigl[I+(k-1)\hat{u}\hat{u}^\top\bigr]\mathbf{x} = [ I + ( k − 1 ) u ^ u ^ ⊤ ] x
∴ M = I + ( k − 1 ) u ^ u ^ ⊤ \therefore\quad M = I + (k-1)\hat{u}\hat{u}^\top ∴ M = I + ( k − 1 ) u ^ u ^ ⊤
八、小结
概念 一句话理解 矩阵 一个线性变换(动作) 矩阵 × 向量 列视角:新基下的坐标组合;行视角:各方向上的投影读数;二者展开后逐分量完全一致 矩阵乘法 列视角:逐列变换,拼回完整矩阵;行视角:逐行扫描,每行独立产出;行列交叉 = 内积排表 不可交换 动作顺序不同结果不同 单位矩阵 什么都不做
下一节:变换能不能「撤销」?什么时候方程有唯一解?这就引出线性方程组、行列式与逆 。