Day 1: 别把矩阵当数字表 —— 线性变换与数据压缩

图解:矩阵作用于网格,将其拉伸、旋转,或者将高维信息压缩到低维 ◎ 图解:矩阵作用于网格,将其拉伸、旋转,或者将高维信息压缩到低维

矩阵是什么?

在 Excel 用户眼里,矩阵是一张表。 在程序员眼里,矩阵是二维数组 float[][]。 但在几何世界里,矩阵 $\mathbf{A}$ 是一个动词

$$\boldsymbol{y} = \mathbf{A}\boldsymbol{x}$$

请不要把它读作“A 乘以 x”。请把它读作:矩阵 $\mathbf{A}$ 作用于向量 $\boldsymbol{x}$,将其变成了 $\boldsymbol{y}$。 这就像函数 $y = f(x)$ 一样,$\mathbf{A}$ 就是那个 $f$。它代表了一种线性变换(Linear Transformation)。


核心视角 1:列向量的线性组合

这是 Day 1 最重要的直觉。如果整篇文章你只能记住一句话,请记住这句:

矩阵与向量的乘积,是矩阵列向量的线性组合。

设矩阵 $\mathbf{A} = [\boldsymbol{c}_1, \boldsymbol{c}_2, \dots, \boldsymbol{c}_n]$,向量 $\boldsymbol{x} = [x_1, x_2, \dots, x_n]^\mathsf{T}$。 那么 $\mathbf{A}\boldsymbol{x}$ 到底在算什么?

$$ \mathbf{A}\boldsymbol{x} = \begin{pmatrix} | & | & & | \\ \boldsymbol{c}_1 & \boldsymbol{c}_2 & \cdots & \boldsymbol{c}_n \\ | & | & & | \end{pmatrix} \begin{pmatrix} x_1 \\ x_2 \\ \vdots \\ x_n \end{pmatrix} = x_1 \boldsymbol{c}_1 + x_2 \boldsymbol{c}_2 + \cdots + x_n \boldsymbol{c}_n $$

几何直觉炸裂时刻:

  1. $\mathbf{A}$ 里的列向量 $\boldsymbol{c}_1, \boldsymbol{c}_2$,其实是变换后的新基底
    • $\mathbf{A}\begin{pmatrix} 1 \\ 0 \end{pmatrix} = \boldsymbol{c}_1$:第一列是基向量 $\boldsymbol{i}$ 变换后的去向。
    • $\mathbf{A}\begin{pmatrix} 0 \\ 1 \end{pmatrix} = \boldsymbol{c}_2$:第二列是基向量 $\boldsymbol{j}$ 变换后的去向。
  2. $\boldsymbol{x}$ 里的坐标 $(x_1, x_2)$,是指令
  3. $\mathbf{A}\boldsymbol{x}$ 的意思是:沿着新基底 $\boldsymbol{c}_1$ 走 $x_1$ 步,再沿着新基底 $\boldsymbol{c}_2$ 走 $x_2$ 步,你现在在哪?

核心视角 2:CR 分解与数据压缩

既然 $\mathbf{A}\boldsymbol{x}$ 是列向量的组合,那我们不得不面对一个尴尬的事实:如果这些列向量很多是“多余”的呢?

想象一个 $1000 \times 1000$ 的大矩阵,但它所有的列,其实都只是第一列的倍数(比如全是一样的列)。 这时候,存储 100 万个数字就太蠢了。我们只需要存一列,然后告诉别人“把这列复制 1000 遍”。

这就是 CR 分解 (Column-Row Decomposition) 的精髓:

所有矩阵 $\mathbf{A}$ 都可以被拆解为“列矩阵”乘以“行矩阵”。

$$\mathbf{A} = \mathbf{C} \mathbf{R}$$

  • $\mathbf{C}$ (Columns):提取 $\mathbf{A}$ 中所有线性无关的列(骨架)。
  • $\mathbf{R}$ (Rows):提取 $\mathbf{A}$ 的行阶梯形(Row Echelon Form)中的非零行(系数)。

举个栗子

看这个 $3 \times 3$ 矩阵,一眼就能看出列 2 是列 1 的 2 倍,列 3 是列 1 的 3 倍: $$ \mathbf{A} = \begin{pmatrix} 1 & 2 & 3 \\ 4 & 8 & 12 \\ 7 & 14 & 21 \end{pmatrix} $$ 它的秩 $r=1$。我们可以把它拆分为:

$$ \mathbf{A} = \underbrace{\begin{pmatrix} 1 \\ 4 \\ 7 \end{pmatrix}}_{\mathbf{C} \ (3 \times 1)} \underbrace{\begin{pmatrix} 1 & 2 & 3 \end{pmatrix}}_{\mathbf{R} \ (1 \times 3)} $$

这就是压缩! 原矩阵需要存 9 个数。 CR 分解后,只需要存 $3+3=6$ 个数。 如果 $\mathbf{A}$ 是 $1000 \times 1000$ 且秩为 1,原本要存 1,000,000 个数,现在只要存 $1000+1000=2000$ 个数。

几何意义:

  • $\mathbf{C}$ 提供了调色盘(基底)。
  • $\mathbf{R}$ 提供了配方(如何混合这些基底)。 矩阵乘法 $\mathbf{A} = \mathbf{C}\mathbf{R}$ 本质上就是用 $\mathbf{R}$ 里的配方,去混合 $\mathbf{C}$ 里的颜料,最后还原出整张图像 $\mathbf{A}$。

矩阵乘法:运动的叠加

有了 CR 分解的铺垫,再看通用的矩阵乘法 $\mathbf{C} = \mathbf{A}\mathbf{B}$,就容易理解了。它可以看作是连续运动(复合变换)。

$$\mathbf{C}\boldsymbol{x} = \mathbf{A}(\mathbf{B}\boldsymbol{x})$$

  • 先做 $\mathbf{B}$ 变换。
  • 再做 $\mathbf{A}$ 变换。
  • $\mathbf{C}$ 就是这一套组合拳的最终效果。

这也解释了为什么矩阵乘法不满足交换律 ($\mathbf{A}\mathbf{B} \neq \mathbf{B}\mathbf{A}$)。 想象一下:

  • 动作 A:脱鞋。
  • 动作 B:穿袜子。 先 A 后 B(脱鞋穿袜),和先 B 后 A(穿袜脱鞋),结果可是天壤之别!

✍️ 课后实战

习题 1:构造旋转矩阵 请构造一个 $2 \times 2$ 矩阵 $\mathbf{A}$,使得它能把所有向量逆时针旋转 90 度

🔐 点击查看解析 / Click to Reveal

【思路】 别去背公式!用我们今天的“列向量视角”。

  1. 旧基底 $\boldsymbol{i} = \begin{pmatrix} 1 \\ 0 \end{pmatrix}$ 旋转 90 度后去哪了?变成了 $\begin{pmatrix} 0 \\ 1 \end{pmatrix}$。 这就是 $\mathbf{A}$ 的第一列
  2. 旧基底 $\boldsymbol{j} = \begin{pmatrix} 0 \\ 1 \end{pmatrix}$ 旋转 90 度后去哪了?变成了 $\begin{pmatrix} -1 \\ 0 \end{pmatrix}$。 这就是 $\mathbf{A}$ 的第二列

【解】 $$\mathbf{A} = \begin{pmatrix} 0 & -1 \\ 1 & 0 \end{pmatrix}$$

习题 2:理解秩 1 矩阵(CR 分解特例) 设列向量 $\boldsymbol{u} = \begin{pmatrix} 1 \\ 2 \end{pmatrix}$,$\boldsymbol{v} = \begin{pmatrix} 3 \\ 4 \end{pmatrix}$。 计算 $\mathbf{A} = \boldsymbol{u}\boldsymbol{v}^\mathsf{T}$。并思考:矩阵 $\mathbf{A}$ 作用在任意向量 $\boldsymbol{x}$ 上,结果有什么几何特点?

🔐 点击查看解析 / Click to Reveal

【解】 $$\mathbf{A} = \begin{pmatrix} 1 \\ 2 \end{pmatrix} \begin{pmatrix} 3 & 4 \end{pmatrix} = \begin{pmatrix} 3 & 4 \\ 6 & 8 \end{pmatrix}$$

几何观察: $\mathbf{A}\boldsymbol{x} = (\boldsymbol{u}\boldsymbol{v}^\mathsf{T})\boldsymbol{x} = \boldsymbol{u}(\boldsymbol{v}^\mathsf{T}\boldsymbol{x})$。 注意 $\boldsymbol{v}^\mathsf{T}\boldsymbol{x}$ 是一个标量(内积,记为 $k$)。 所以 $\mathbf{A}\boldsymbol{x} = k \boldsymbol{u}$。 这意味着:无论输入 $\boldsymbol{x}$ 是什么,输出永远都在 $\boldsymbol{u}$ 这一条直线上!这就是为什么 $\mathbf{A}$ 的秩只有 1。

CR 分解视角: 其实 $\mathbf{A} = \boldsymbol{u}\boldsymbol{v}^\mathsf{T}$ 就是最简单的 CR 分解!

  • $\boldsymbol{u}$ 就是列矩阵 $\mathbf{C}$。
  • $\boldsymbol{v}^\mathsf{T}$ 就是行矩阵 $\mathbf{R}$。 它完美展示了如何用两个向量来“压缩”一个矩阵。

线性代数重构计划 (The Plan)

加载评论