1.2 矩阵与线性变换
上一节我们建立了向量的几何与代数直觉——一根带方向的箭头。本节把视角从对象提升到动作:矩阵(Matrix)描述的是向量如何被变换。无论把向量理解为位置还是信息,矩阵都描述对向量的变换与处理。线性代数重要,因为现实世界中大量问题都可以抽象为用矩阵变换向量。机器学习中的权重矩阵、图像处理中的滤波核、医学影像中的重建矩阵,都是同一回事——一个把输入向量映射到输出向量的线性变换。
1.2.1 矩阵的几何本质与代数表达
矩阵作为线性变换的数学抽象
要理解矩阵,一种视角是把它视为一种函数——把输入向量
这种变换必须满足两条性质,称为线性(Linearity):
第一条是可加性——和的像等于像的和;第二条是齐次性——数乘的像等于像的数乘。两条性质合起来等价于:线性变换保持向量的线性组合关系不变。这是后续一切讨论的基石——只要满足这两条,变换就可以用矩阵表示;只要能用矩阵表示,就满足这两条性质。
矩阵的几何直觉:从空间到空间的映射
几何上,矩阵
一个直观的类比是把矩阵看作网格变换器:想象输入空间是一张画满方格的橡皮纸,矩阵
矩阵的代数定义:m × n 数表
代数上,矩阵是一个
其中
在工程实践中,矩阵的行与列常常承载具体的语义。在基因表达数据中,行代表基因,列代表样本;在图像数据中,行代表像素的
方阵与非方阵的几何意义差异
方阵(Square Matrix)是行数等于列数的矩阵,即
非方阵(Non-square Matrix)是
维度流向
对于矩阵
矩阵的列向量:基向量的像
理解矩阵
也就是说,矩阵的每一列,就是它把对应基向量映射到的位置。这个观察很重要——它告诉我们:要理解一个矩阵做什么变换,只需要看它把基向量送到了哪里。一旦知道基向量的去向,由线性性质,任意向量(作为基向量的线性组合)的像也就确定了。
具体地,对于
即
单位矩阵与零矩阵
单位矩阵(Identity Matrix)
单位矩阵对应恒等变换——它把任何向量映射到自身,
零矩阵(Zero Matrix)
矩阵的分量记法与基向量映射
矩阵的元素
这种记法把矩阵的每个元素与基向量映射显式联系起来,是理解矩阵-向量乘法的根本视角。当你看到
import numpy as np
# 一个 2x3 矩阵:把 R^3 映射到 R^2
A = np.array([[1, 2, 0],
[0, 1, 3]])
# 验证列向量是基向量的像
e1 = np.array([1, 0, 0])
e2 = np.array([0, 1, 0])
e3 = np.array([0, 0, 1])
print(f"A @ e1 = {A @ e1}") # [1, 0] —— 第 1 列
print(f"A @ e2 = {A @ e2}") # [2, 1] —— 第 2 列
print(f"A @ e3 = {A @ e3}") # [0, 3] —— 第 3 列
# 任意向量 x = (4, 5, 6) 的像
x = np.array([4, 5, 6])
print(f"A @ x = {A @ x}") # [14, 23],即 4*[1,0] + 5*[2,1] + 6*[0,3]交互演示:基向量的像
下面的交互演示把矩阵的列 = 基向量的像这一核心思想可视化。3D 场景中:
- 红/蓝/绿半透明箭头是原始基向量
(参照) - 深色不透明箭头是矩阵
作用后的像 - 拖动
四个滑块,观察 与 如何移动 - 鼠标拖拽旋转视角,滚轮缩放,从不同角度观察基向量的像
建议实验:
- 点击单位矩阵预设,所有箭头重合(
) - 点击**旋转 45°**预设,观察
整体旋转,长度不变 - 点击剪切预设,观察
不动而 倾斜——这是剪切变换的特征 - 把
调成共线(如 ),观察 (两个像共线,维度塌缩)
1.2.2 矩阵的代数运算与几何对应
矩阵运算的代数规则看似繁琐,但每一条规则背后都有清晰的几何含义。理解几何含义比记忆公式重要——公式可以查表得到,但几何直觉一旦建立,就能在新问题中迅速定位正确方向。
矩阵加法:变换的叠加
两个同形状的矩阵
几何意义:矩阵加法对应变换的叠加(Superposition)。
矩阵加法满足交换律(
矩阵数乘:变换强度的缩放
标量
几何意义:数乘对应变换强度的整体缩放。
矩阵乘法:行与列的点积法则
矩阵乘法是线性代数中重要的运算。对于
也就是说,
矩阵乘法要求内维匹配——
矩阵乘法的顺序依赖性
矩阵乘法不满足交换律:一般而言
几何解释清晰:
import numpy as np
A = np.array([[0, 1], # 90 度逆时针旋转
[-1, 0]])
B = np.array([[2, 0], # x 方向拉伸 2 倍
[0, 1]])
print(f"AB =\n{A @ B}")
print(f"BA =\n{B @ A}")
# AB ≠ BA,证明矩阵乘法不可交换矩阵乘法的结合律
矩阵乘法满足结合律:
结合律是后续讨论矩阵幂、矩阵指数、矩阵级数的基础。没有结合律,矩阵的连乘就失去了明确含义,高级概念如
矩阵乘法的分配律
矩阵乘法对加法满足分配律:
矩阵乘法的几何本质:函数的复合
矩阵乘法的几何本质是函数的复合(Composition of Functions)。如果把矩阵理解为把输入向量映射到输出向量的函数,那么矩阵乘法
这个视角把矩阵与函数论统一起来——矩阵是离散的函数,函数是连续的矩阵。在泛函分析中,这种统一达到了极致:算子(无限维矩阵)就是函数空间之间的线性映射。理解矩阵即函数复合,就理解了为什么线性代数在量子力学、信号处理、机器学习中如此重要——它们都在处理复合变换。
矩阵幂:重复应用同一变换
对于方阵
矩阵幂在工程中重要。马尔可夫链的状态转移矩阵
矩阵的转置与对称矩阵
矩阵
如果方阵
交互演示:矩阵加法与乘法的几何对应
下面的演示把本节讨论的两种核心运算——矩阵加法与矩阵乘法——可视化。组件顶部按钮切换两种模式:
- 矩阵加法模式:8 个滑块分别调节
和 的四个元素,画布同时显示三个变换后的正方形——蓝色(仅 )、紫色(仅 )、绿色( ,叠加效果),右侧实时显示 的数值 - 矩阵乘法模式:8 个滑块调节
和 ,分步动画展示**先 后 **的复合过程——原始(灰虚线)→ 应用 (黄色虚线中间态)→ 应用 (红色最终态),右侧显示复合矩阵 的数值
关键观察:
- 加法模式:绿色
的正方形 ≠ 蓝色 与紫色 的简单叠加(位置上),而是对任意向量 , - 乘法模式:分步动画直观展示**先
后 **的执行顺序, 的几何效果与 通常不同(见 1.2.4 节)
1.2.3 四种基本线性变换
本节是本章的核心。我们将系统讨论四种常见的线性变换:缩放、旋转、剪切、反射。它们是构造一切复杂变换的基本单元——任何二维线性变换都可以分解为这四种基本变换的组合。
缩放变换:均匀与各向异性
缩放变换(Scaling / Dilation)改变向量的长度,但不改变方向(在各向异性缩放下,方向会发生偏转)。简单的缩放矩阵是对角矩阵:
它把
均匀缩放(Uniform Scaling):当
各向异性缩放(Non-uniform Scaling):当
缩放的几何效果:面积缩放倍率为
import numpy as np
# 各向异性缩放:x 拉伸 2 倍,y 压缩到 1/2
S = np.array([[2, 0],
[0, 0.5]])
# 单位圆上的点(参数化)
theta = np.linspace(0, 2*np.pi, 20)
unit_circle = np.stack([np.cos(theta), np.sin(theta)])
# 变换后
transformed = S @ unit_circle
# 面积缩放倍率
print(f"面积缩放倍率 = {np.linalg.det(S)}") # 1.0,行列式 = s_x * s_y旋转变换:保持长度不变
旋转变换(Rotation)把向量绕原点旋转一个角度。二维旋转矩阵的标准形式为:
按惯例,
旋转的两条关键性质:保持原点不动(线性变换的必然要求)与保持向量长度不变(旋转不改变模长)。后一条使得旋转矩阵是正交矩阵——它的列向量是单位正交的,行列式为
三维旋转:在三维空间中,旋转必须指定一个旋转轴。基础的三种旋转是绕
任意三维旋转都可以表示为这三种基础旋转的复合,对应的三个角度
剪切变换:保持面积不变
剪切变换(Shear / Skew)是一种形变——把矩形变成平行四边形,但保持面积不变。二维水平剪切矩阵为:
它的几何效果是:固定
对应的垂直剪切矩阵为:
它固定
剪切变换的一个重要性质是面积不变——其行列式为
反射变换:翻转空间定向
反射变换(Reflection)把向量关于某条直线或某个平面对称翻转。常见的二维反射矩阵包括:
关于
关于
关于直线
关于原点的中心对称(点反射,等价于旋转
反射变换的关键性质是翻转空间定向——其行列式为
交互演示:四种基本变换的实时探索
下面的交互演示把本节讨论的四种基本变换整合在一个场景中。你可以:
- 顶部按钮切换变换类型(缩放 / 旋转 / 剪切 / 反射)
- 滑块实时调节参数(如缩放系数
、旋转角度 、剪切系数 ) - 观察灰色虚线是原始单位正方形,绿色(或红色)填充是变换后的形状
- 右侧实时显示变换矩阵
、行列式 、面积与空间定向
建议实验:
- 切到缩放,把
或 调到 0,观察 (塌缩为直线) - 切到旋转,把
从 0° 扫到 360°,勾选显示旋转轨迹观察单位圆, 始终为 1 - 切到剪切,切换水平/垂直方向,调节
,观察面积守恒行始终绿色高亮( ) - 切到反射,切换 4 种反射轴,观察
时填充色由绿变红(定向翻转)
1.2.4 变换的复合与分解
复合变换:矩阵连乘的几何顺序
多个变换连续作用,称为复合变换(Composite Transformation)。代数上,复合变换对应矩阵连乘——若先应用
这种从右向左的顺序与函数复合
import numpy as np
# 三个变换:B(缩放)→ R(旋转 90°)→ F(关于 X 轴反射)
B = np.array([[2, 0], [0, 1]]) # x 拉伸 2 倍
R = np.array([[0, -1], [1, 0]]) # 逆时针旋转 90°
F = np.array([[1, 0], [0, -1]]) # 关于 X 轴反射
x = np.array([1, 1])
# 顺序:先 B 后 R 后 F,对应复合矩阵 F @ R @ B
composite = F @ R @ B
print(f"复合变换 F·R·B 作用于 x = {composite @ x}")
# 等价的分步执行
y1 = B @ x # 第 1 步:缩放
y2 = R @ y1 # 第 2 步:旋转
y3 = F @ y2 # 第 3 步:反射
print(f"分步执行结果 = {y3}") # 应与上面相同复合变换的顺序解读
先旋转再缩放与先缩放再旋转的差异,可以通过一个具体例子看清。设
- 先旋转 90° 再缩放 2 倍(复合矩阵
):先把 旋转为 ,再缩放为 。 - 先缩放 2 倍再旋转 90°(复合矩阵
):先把 缩放为 ,再旋转为 。
在这个特例中两者恰好相同,但只要换一个向量就会不同——例如
矩阵分解的直觉
理解复合变换的另一面是矩阵分解(Matrix Decomposition)——把一个复杂矩阵拆解为若干简单矩阵的乘积。把一道复杂的菜分解为洗、切、炒、调味四个简单步骤,矩阵分解把一个难以直接理解的变换拆解为几个一看就懂的变换的组合。
重要的矩阵分解之一是极分解(Polar Decomposition):任何方阵
更细的分解是 SVD(后续章节详述):
逆变换:撤销操作
如果变换
并非所有变换都有逆。可逆变换(Invertible)要求变换是一一对应的——每个输入对应唯一的输出,且每个输出也对应唯一的输入。从几何上看,可逆变换不能塌缩维度——塌缩意味着多个输入对应同一输出,无法撤销。
不可逆变换(Non-invertible)的典型例子是投影——投影把整个平面压到一条直线,自然无法从直线反推平面。判定矩阵是否可逆的几何标准是是否塌缩维度,代数标准则是下一节要讨论的行列式是否为零。
逆矩阵的代数求法
求解逆矩阵有几种常用方法。
伴随矩阵法:
初等行变换法:把
import numpy as np
A = np.array([[2, 1],
[1, 3]])
# 用 NumPy 直接求逆
A_inv = np.linalg.inv(A)
print(f"A^-1 =\n{A_inv}")
# 验证:A @ A^-1 = I
print(f"A @ A^-1 =\n{A @ A_inv}") # 应接近单位矩阵
# 注意:数值计算中很少显式求逆,通常用 np.linalg.solve 更稳定逆矩阵的几何性质
逆矩阵满足一条重要的穿脱顺序性质:
几何意义直观——复合变换的撤销顺序与原变换相反。穿衣服时先穿内衣再穿外套,脱衣服时必须先脱外套再脱内衣。如果
这条性质在密码学、信号处理、控制论中频繁使用——任何复合操作的逆操作都必须反向进行。
交互演示:AB ≠ BA 的并排对比
下面的演示用两个并排画布直观展示矩阵乘法的顺序依赖性:
- 配置变换 A(旋转
)和变换 B(缩放 + 剪切 ),通过滑块独立调节 - 左画布展示先 A 后 B的复合(矩阵
),用绿色填充 - 右画布展示先 B 后 A的复合(矩阵
),用紫色填充 - 点击 下一步 或 自动播放 同步推进两种顺序的分步回放(原始 → 中间态 → 最终态)
- 右侧实时显示
、 、 、 四个矩阵的数值,并验证
关键观察:
- 两个画布的最终形状通常截然不同——这是
的直观证据 - 但两个最终形状的面积相同——因为
- 调节
或 时, 或 退化为恒等矩阵,此时 (这是矩阵可交换的特例)
1.2.5 行列式:变换的放大倍数
行列式的几何起源:面积缩放因子
行列式(Determinant)是方阵重要的不变量之一,记作
考虑二维情形。矩阵
如果
二阶行列式的公式
对于
这个看似简单的公式背后有清晰的几何解释。
三阶行列式:平行六面体的有向体积
对于
行列式的符号:空间定向
行列式的符号承载着重要的几何信息——空间定向(Orientation)。
正行列式(
负行列式(
零行列式(
行列式的代数性质与几何对应
行列式有几条核心的代数性质,每一条都对应清晰的几何含义。
乘法性质:
转置不变性:
逆矩阵性质:
行列式为零:维度的塌缩
行列式为零是线性代数重要的报警信号。当
- 几何上:变换把空间压扁——二维平面被压成直线或点,三维空间被压成平面、直线或点。这种塌缩使得变换不可逆——多个不同的输入被映射到同一输出,无法恢复。
- 代数上:矩阵不可逆,对应的线性方程组
要么无解( 不在 的列空间中),要么有无穷多解(自由变量存在)。 - 工程上:数值算法会失效或产生巨大误差,因为系统处于奇异状态。
理解行列式为零的几何含义——维度塌缩——是把握线性代数核心概念(秩、可逆性、解的存在性)的关键。
行列式与可逆性的等价关系
行列式重要的应用之一是判定矩阵可逆性:
这条等价关系把几何可逆性(变换不塌缩维度)与代数可逆性(行列式非零)严格对应起来。后续学习秩、特征值、SVD 时,这条等价关系会以不同形式反复出现——可逆矩阵的秩满秩、特征值非零、奇异值非零。这些看似不同的判据,都在描述同一件事:变换是否塌缩了维度。
行列式的本质
行列式是一个倍率——它告诉你变换把空间放大或缩小了多少倍。它的符号告诉你是否翻转了空间,它的绝对值告诉你面积/体积的缩放比例,它是否为零告诉你是否塌缩了维度。这三层信息合在一起,构成了行列式作为变换指纹的全部意义。
交互演示:行列式 · 面积与定向
下面的演示把行列式的几何本质——面积缩放因子与定向指示器——可视化。你可以:
- 拖动 4 个滑块改变矩阵
的四个元素 - 实时观察单位正方形被变换为平行四边形的过程
- 5 个预设按钮一键切换典型场景(单位矩阵 / 旋转 30° / 缩放 2 倍 / 反射 / 不可逆)
- 右侧实时显示
、缩放因子 、面积效果、定向徽章、可逆性
颜色编码(按
- 绿色填充:
,放大效果(面积变大) - 红色填充:
,缩小效果(面积变小) - 灰色填充:
,塌缩为直线(不可逆) - 黄色填充:
,面积基本保持
符号徽章:
- 蓝色徽章:
,定向保持(右手系仍是右手系) - 橙色徽章:
,定向翻转(右手系变成左手系,伴随翻面动画) - 灰色徽章:
,塌缩
建议实验:
- 点击不可逆预设(
,两列共线),观察 、灰色填充 - 点击反射预设,观察橙色徽章定向翻转和翻面动画
- 拖动滑块让
从正变负,观察徽章从蓝变橙的瞬间翻转
import numpy as np
# 可逆矩阵:行列式非零
A = np.array([[2, 1],
[1, 3]])
print(f"det(A) = {np.linalg.det(A):.2f}") # 5.0,可逆
# 不可逆矩阵:行列式为零(两列共线)
B = np.array([[1, 2],
[2, 4]])
print(f"det(B) = {np.linalg.det(B):.2f}") # 0.0,不可逆
# 反射变换:行列式为负
F = np.array([[1, 0],
[0, -1]])
print(f"det(F) = {np.linalg.det(F):.2f}") # -1.0,定向翻转
# 验证乘法性质
print(f"det(A·F) = {np.linalg.det(A @ F):.2f}") # -5.0
print(f"det(A)·det(F) = {np.linalg.det(A) * np.linalg.det(F):.2f}") # -5.01.2.6 本节小结
从向量到变换的认知跃迁
本节完成了从向量到变换的认知跃迁。矩阵是把输入空间映射到输出空间的线性函数。它的每一列是基向量的像,它的乘法是函数的复合,它的行列式是面积/体积的缩放倍率,它的可逆性对应是否塌缩维度。掌握这一整套动作视角,后续学习线性方程组、特征值、SVD 时,就能始终把握几何本质——它们都是在不同侧面刻画变换的结构。
接下来 1.3 节将把这套变换视角应用于线性方程组——把解方程翻译为寻找被
练习题
第 1 题 概念推导
设
参考答案
只需验证
同理
几何解读:
第 2 题 代码验证
利用本节的 <CompositeTransformDemo> 交互组件,固定变换
参考答案
旋转
第 3 题 概念推导
设
参考答案
常见错误
错误 1 · 把矩阵乘法当作可交换运算
原因:受标量乘法
解决:始终按从右向左的顺序解读矩阵连乘:A @ B @ x 时显式注释每步对应的变换名称,避免顺序错位。
错误 2 · 对奇异矩阵直接调用求逆函数
原因:当 np.linalg.inv 在数值扰动下可能不报错而返回极大数值的伪逆,导致后续计算结果失真。原因在于未先检查行列式或秩。
解决:求逆前先用 np.linalg.matrix_rank(A) 或条件数 np.linalg.cond(A) 判定是否满秩;解线性方程组时优先使用 np.linalg.solve 而非显式求逆,遇到奇异矩阵会抛出 LinAlgError 便于定位问题。
错误 3 · 把行列式为零与矩阵全零混为一谈
原因:看到
解决:明确行列式为零的判据是列向量线性相关,而非元素全零。任何秩亏矩阵(列向量存在冗余)都行列式为零,无论其元素是否非零;判定时检查秩是否等于矩阵阶数。
错误 4 · 复合变换撤销时按原顺序求逆
原因:把
解决:记忆穿脱顺序相反这一类比:复合