想象你手里有一张画满方格线的橡皮膜。你从四个角用力拉它,把它拉成一张歪斜的膜——这个“拉伸”的动作,就好比矩阵对向量做的事。膜上绝大多数线条都转了向:原本指向正东的线,可能被拉偏到东北方向去了。但如果你足够细心,会发现存在那么几条特殊的方向:它们虽然被拉长或压短了,却始终笔直地指着原来的方向,仿佛在说“任凭风浪起,我自岿然不动”。这些“方向不变”的线,就是矩阵的特征向量;而被拉长的倍数,就是特征值。 整个线性代数的精髓,几乎都藏在这几个极少数方向上。求特征值、特征向量,就是在给矩阵做“体检”,找出它骨子里的主筋。它能解释数据为什么那样分布(PCA 降维),也能预言一个系统反复演化之后走向何方(动态系统)。学完这篇,你不仅能亲手求出一个矩阵的特征值和特征向量,还能真正理解它们为什么被称为“矩阵的灵魂方向”。

岗位关联

特征值与特征向量是 AI 的“透视镜”:从 PCA 降维、人脸识别到 RNN 梯度消失、PageRank 排名,几乎所有核心算法的底层都在求解特征分解。掌握它,你就拿到了看懂这些模型数学本质的第一把钥匙。

目录
  1. 可视化演示
  2. 几何直觉:橡皮膜上的“不弯折”方向
  3. 定义与记号:一句话的灵魂拷问
  4. 特征值求解:把“猜方向”变成“解方程”
  5. 核心性质:不同方向互不打扰
  6. 特征分解:换个坐标系,世界清爽了
  7. PCA 应用:在数据的迷雾里找主路
  8. 动态系统:反复拉扯,谁主导一切
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

通过矩阵变换、特征多项式求解和PCA降维三个视角,直观理解特征值与特征向量的几何意义。

本节配有交互动效(进入视口后自动加载,约 3KB)。

向量变换视角 特征向量方向不变仅拉伸 普通向量方向偏转 Av=lambda*v 矩阵作用于特征向量等价于标量缩放

几何直觉:橡皮膜上的“不弯折”方向

想象一张画满方格线的橡皮膜,你从四个角用力拉它。这个“拉”的动作就是矩阵的作用:它把膜上的每一个点送到新的位置,把每一条线拉成新的线。膜上绝大多数线条都转了向,原本指向正东的线,可能被拉偏成东北方向。但细心观察会发现,有那么少数几条线,虽然被拉长或压短了,方向却始终不变,依然笔直地指着原来的方向。这些“任凭怎么拉都只在自己直线上伸缩”的方向,就是特征向量,而伸缩的倍数就是特征值。

用数学语言说,矩阵 A 就代表那次“拉膜”的动作,它把任意向量 v 变成一个新向量 Av。绝大多数向量会被扭转到别的方向,但有一类非零向量 v,作用之后仅仅是被拉长或压短了一个倍数 λ,方向完全不变。我们来看一个具体例子:矩阵 A = [[2, 1], [1, 2]],取向量 v = (1, 1):

再取 v = (1, -1) 代入,同样可以验证 A v = (1, -1),即 λ = 1——长度不变也可以理解为“拉伸 1 倍”。这张“橡皮膜”的两条主筋,就这么被找到了。

(2112)(11)=(33)=3(11)\displaystyle \begin{pmatrix}2 & 1\\ 1 & 2\end{pmatrix}\begin{pmatrix}1\\ 1\end{pmatrix} = \begin{pmatrix}3\\ 3\end{pmatrix} = 3\begin{pmatrix}1\\ 1\end{pmatrix}
输出 (3, 3) 正好是输入 (1, 1) 的 3 倍:方向没变,长度翻三倍。于是 (1, 1) 是特征向量,3 是特征值。
  1. 执行矩阵乘法2×2 矩阵与列向量相乘,逐行做点积——第一行 2×1+1×1=3,第二行 1×1+2×1=3
    (2×1+1×11×1+2×1)=(33)\displaystyle \begin{pmatrix}2\times 1 + 1\times 1\\ 1\times 1 + 2\times 1\end{pmatrix} = \begin{pmatrix}3\\ 3\end{pmatrix}
  2. 读出结果向量得到 (3, 3),它与原向量 (1, 1) 落在同一条直线上,只是更长了
    (33) 与 (11) 共线\displaystyle \begin{pmatrix}3\\ 3\end{pmatrix} \text{ 与 } \begin{pmatrix}1\\ 1\end{pmatrix} \text{ 共线}
  3. 提取公因子把 (3, 3) 写成 3 倍的 (1, 1),这个 3 就是该方向上的拉伸倍数
    (33)=3(11)\displaystyle \begin{pmatrix}3\\ 3\end{pmatrix} = 3\begin{pmatrix}1\\ 1\end{pmatrix}
  4. 识别特征对所以方向向量 (1, 1) 是特征向量、倍数 3 是特征值,这一对合称特征对
    λ=3,v=(1,1)T\displaystyle \lambda = 3, \quad \mathbf{v} = (1, 1)^{\mathsf{T}}

定义与记号:一句话的灵魂拷问

怎么判断一条线是不是橡皮膜的主筋?最直接的办法:拉一下,看它是否还留在原来那条直线上。这相当于对每个方向做一次“灵魂拷问”:在矩阵作用之后,你还在原来的直线上吗?把这个直觉写成数学定义,就是特征值问题。

定义:设 A 是 n 阶方阵,如果存在非零向量 v 和一个数 λ,使得

则称 λ 是 A 的一个特征值,v 是 A 的对应于 λ 的特征向量。

另外要注意:如果 v 是特征向量,那么它的任何非零倍数 cv 也是特征向量(因为 A(cv) = cAv = cλv = λ(cv))。所有满足 Av = λv 的向量(连同零向量)构成一个线性子空间,称为特征空间。回到橡皮膜,主筋方向其实是一整条直线——在这条线上随便选个箭头,拉完都还在线上,这一整条线就是特征空间。

Av=λv,v≠0\displaystyle A\mathbf{v} = \lambda \mathbf{v}, \qquad \mathbf{v} \neq \mathbf{0}
特征向量的“身份证”有两条:必须是非零向量;作用后跟原向量共线。λ 是负数表示反向拉、λ 是零表示压成一点。
  1. 左侧 A v矩阵 A 对非零向量 v 施加线性变换,得到一个新向量
    Av=变换后的向量\displaystyle A\mathbf{v} = \text{变换后的向量}
  2. 右侧 λ v变换结果恰好等于某个数 λ 乘以原向量 v,这是“方向不变”的代数表达
    λv=把 v 拉长到 λ 倍\displaystyle \lambda \mathbf{v} = \text{把 v 拉长到 λ 倍}
  3. 几何判读v 与 λv 永远共线;λ 大于 0 方向相同,λ 小于 0 方向反向 180 度
    v∥λv(方向不变或反向)\displaystyle \mathbf{v} \parallel \lambda\mathbf{v} \quad (\text{方向不变或反向})
  4. 非零约束v ≠ 0 是硬性条件,否则零向量恒满足方程,等式就失去筛选意义
    v≠0(排除平凡解)\displaystyle \mathbf{v} \neq \mathbf{0} \quad \text{(排除平凡解)}

特征值求解:把“猜方向”变成“解方程”

现实中我们不可能拿着量角器,把膜上每个方向都拉一遍。需要把“找方向不变”这件事,翻译成纯粹的代数计算。思路很漂亮:既然 Av = λv,那就把所有项移到同一边,变成 (A - λI)v = 0。这是一个齐次线性方程组,它想有非零解,系数矩阵就必须“降秩”——行列式为 0。于是得到特征方程:

拿之前的矩阵 A = [[2, 1], [1, 2]] 练手:a=d=2,b=c=1,代入得 λ² - 4λ + 3 = 0,解得 λ = 3 或 λ = 1。然后把 λ = 3 代回 (A - 3I)v = 0,即 [-1, 1; 1, -1]v = 0,解得 v = t(1, 1);把 λ = 1 代回,解得 v = t(1, -1)。整个过程就像给橡皮膜做 CT 扫描:先算出“主筋”的所有可能拉伸倍数,再逐一确定每条主筋的精确位置。

det⁡(A−λI)=0⟹λ2−(a+d)λ+(ad−bc)=0\displaystyle \det(A - \lambda I) = 0 \quad\Longrightarrow\quad \lambda^{2} - (a + d)\lambda + (ad - bc) = 0
对 n 阶矩阵,特征方程是 λ 的 n 次多项式方程,它的 n 个根(允许复数)就是全部特征值。解完 λ 再逐一回代,就能求出对应的特征向量。
  1. 移项合并把 Av = λv 移项成 (A - λI)v = 0,其中 I 是单位矩阵
    (A−λI)v=0\displaystyle (A - \lambda I)\mathbf{v} = \mathbf{0}
  2. 非零解条件齐次方程组有非零解当且仅当系数矩阵的行列式为零,这是线性代数核心定理
    det⁡(A−λI)=0\displaystyle \det(A - \lambda I) = 0
  3. 展开行列式对 2×2 矩阵 A−λI 算行列式,(a−λ)(d−λ) − bc
    (a−λ)(d−λ)−bc=0\displaystyle (a - \lambda)(d - \lambda) - bc = 0
  4. 整理多项式展开合并同类项,得到 λ 的一元二次方程,两根即特征值
    λ2−(a+d)λ+(ad−bc)=0\displaystyle \lambda^{2} - (a + d)\lambda + (ad - bc) = 0

核心性质:不同方向互不打扰

橡皮膜上有两条主筋:你沿着其中一条拉,另一条方向上的线不会跟着拐弯,它们是“独立的”。数学上把这种独立性叫做线性无关。这里有一条极其重要的定理:不同特征值对应的特征向量必线性无关。反证法很简洁:假设 c₁v₁ + c₂v₂ = 0,两边左乘 A 得 c₁λ₁v₁ + c₂λ₂v₂ = 0;再用 λ₁ 乘第一个式子并与第二个相减,得到 c₂(λ₂ - λ₁)v₂ = 0。由于 λ₂ ≠ λ₁ 且 v₂ ≠ 0,必有 c₂ = 0,同理 c₁ = 0,矛盾。这一定理对任意有限个不同特征值都成立。

除了线性无关,还有两个“快捷账单”可以快速验证计算是否正确:

还有一个推论值得记住:如果 B = P⁻¹AP(称 A 与 B 相似),那么 A 与 B 拥有完全相同的特征值。因为拉膜的动作换个坐标系来看,拉伸倍数不会改变。主筋互不打扰,才有资格被拿来当新坐标轴——这正是下一节对角化的思想地基。

∑i=1nλi=tr⁡(A),∏i=1nλi=det⁡(A)\displaystyle \sum_{i=1}^{n}\lambda_{i} = \operatorname{tr}(A), \qquad \prod_{i=1}^{n}\lambda_{i} = \det(A)
所有特征值加起来等于矩阵对角线元素之和(迹),乘起来等于矩阵的行列式。算出特征值后先核对这两条,能拦住 90% 的粗心错误。
  1. 特征值之和全部特征值相加等于矩阵的迹,即对角线元素之和
    λ1+λ2+⋯+λn=a11+a22+⋯+ann\displaystyle \lambda_{1} + \lambda_{2} + \cdots + \lambda_{n} = a_{11} + a_{22} + \cdots + a_{nn}
  2. 特征值之积全部特征值相乘等于矩阵的行列式
    λ1λ2⋯λn=det⁡(A)\displaystyle \lambda_{1}\lambda_{2}\cdots\lambda_{n} = \det(A)
  3. 快速验证前面例子 3+1 = tr(A) = 4,3×1 = det(A) = 3,完全吻合
    3+1=4,3×1=3\displaystyle 3 + 1 = 4, \quad 3 \times 1 = 3
  4. 推导来源把特征多项式写成 (λ−λ₁)(λ−λ₂)…(λ−λₙ) 展开,比较 λⁿ⁻¹ 项和常数项系数即得
    det⁡(A−λI)=∏i=1n(λi−λ)\displaystyle \det(A - \lambda I) = \prod_{i=1}^{n}(\lambda_{i} - \lambda)

特征分解:换个坐标系,世界清爽了

既然不同主筋互不打扰,那干脆把眼睛移到主筋方向上去看问题:如果把坐标轴换成两条主筋,那么那次“拉膜”就只剩下纯粹的沿轴伸缩,没有一丝歪斜。数学实现就是特征分解(谱分解)。

假设 n 阶矩阵 A 有 n 个线性无关的特征向量 v₁, …, vₙ,对应的特征值为 λ₁, …, λₙ。把特征向量按列拼成矩阵 P,把特征值按顺序放在对角线上得到对角矩阵 D,那么:

特征分解最大的红利在幂运算:手算 A 的 100 次方不需要连乘 100 次矩阵,只要把每个特征值取 100 次幂。但请注意前提——必须有 n 个线性无关的特征向量(并非所有矩阵都行,比如剪切矩阵就无法对角化)。

A=PDP−1,Ak=PDkP−1\displaystyle A = PDP^{-1}, \qquad A^{k} = PD^{k}P^{-1}
P 是“换坐标系”用的基变换矩阵,D 是在新坐标系下矩阵那清爽的样子。验证方法很简单:A 乘以 P 的第 i 列,等于 A 作用在 vᵢ 上,结果恰好是 λᵢvᵢ,也就是 PD 的第 i 列。
  1. 构造 P把 n 个线性无关特征向量按列排成矩阵 P,它可逆
    P=(v1v2⋯vn)\displaystyle P = \begin{pmatrix} \mathbf{v}_{1} & \mathbf{v}_{2} & \cdots & \mathbf{v}_{n} \end{pmatrix}
  2. 构造 D对应特征值放在对角线、其余位置为零,得到对角矩阵
    D=(λ1⋱λn)\displaystyle D = \begin{pmatrix} \lambda_{1} & & \\ & \ddots & \\ & & \lambda_{n} \end{pmatrix}
  3. 验证 AP = PDAP 的第 i 列是 A vᵢ = λᵢvᵢ,正好等于 PD 的第 i 列,因此等式成立
    AP=(λ1v1⋯λnvn)=PD\displaystyle AP = \begin{pmatrix} \lambda_{1}\mathbf{v}_{1} & \cdots & \lambda_{n}\mathbf{v}_{n} \end{pmatrix} = PD
  4. 幂运算展开Aᵏ = (PDP⁻¹)ᵏ = PDᵏP⁻¹,中间的 P⁻¹P 全部抵消,Dᵏ 只需对每个 λᵢ 求 k 次幂
    Ak=PDkP−1,Dk=(λ1k⋱λnk)\displaystyle A^{k} = PD^{k}P^{-1}, \quad D^{k} = \begin{pmatrix} \lambda_{1}^{k} & & \\ & \ddots & \\ & & \lambda_{n}^{k} \end{pmatrix}

PCA 应用:在数据的迷雾里找主路

现实中没人给你画好橡皮膜,摆在你面前的只是一大堆数据点,像案板上撒了一把豆子。PCA(主成分分析)要回答的问题是:这些豆子主要沿哪个方向散开?答案又是特征向量。它的洞察是:数据在哪里“变化最剧烈”,哪里就藏着最重要的信息。

具体操作分四步。第一步,把数据零中心化:每一列减去该列的均值,让数据中心落在原点,得到矩阵 X。第二步,构造协方差矩阵 C = (1/n)XᵀX,它的第 (i, j) 个元素刻画第 i 维与第 j 维的协同变化。第三步,对 C 做特征分解。第四步,取模最大的前 k 个特征值对应的特征向量作为投影方向。为什么是最大特征值?因为数据在单位方向 u 上的投影方差恰好是:

把数据投影到第一主成分上,就从 n 维降到了 1 维,且保留了最多的“变化量”。人脸识别里的“特征脸”就是这个套路:把每张人脸拉成高维向量,求协方差矩阵的特征向量,取前几十个作为“特征脸”基底,任何脸都能用几十个系数近似表示。

C=1nXTX,Var⁡[u]=uTCu\displaystyle \mathbf{C} = \frac{1}{n}X^{\mathsf{T}}X, \qquad \operatorname{Var}[\mathbf{u}] = \mathbf{u}^{\mathsf{T}}\mathbf{C}\mathbf{u}
投影方差 = uᵀCu。u 是单位向量时,这个二次型的最大值恰为 C 的最大特征值,而取到最大值的 u 正是该特征值对应的特征向量——这就是第一主成分。
  1. 零中心化每一列先减去均值,使数据各维均值为 0,这是投影计算的前提
    X=(x1−xˉ⋯xn−xˉ)T\displaystyle X = \begin{pmatrix} \mathbf{x}_{1} - \bar{\mathbf{x}} & \cdots & \mathbf{x}_{n} - \bar{\mathbf{x}} \end{pmatrix}^{\mathsf{T}}
  2. 协方差矩阵C = (1/n)XᵀX,它是实对称矩阵,对角元是各维方差、非对角元是协方差
    C=1nXTX\displaystyle \mathbf{C} = \frac{1}{n}X^{\mathsf{T}}X
  3. 投影方差把数据投影到单位方向 u 上,投影值的方差等于 uᵀCu
    Var⁡[u]=E[(uTx)2]=uTCu\displaystyle \operatorname{Var}[\mathbf{u}] = \mathbb{E}\left[(\mathbf{u}^{\mathsf{T}}\mathbf{x})^{2}\right] = \mathbf{u}^{\mathsf{T}}\mathbf{C}\mathbf{u}
  4. 最大方差原理对实对称矩阵,uᵀCu 在单位球面上的最大值等于最大特征值,对应的 u 是其特征向量
    max⁡∥u∥=1uTCu=λmax⁡\displaystyle \max_{\lVert \mathbf{u} \rVert = 1} \mathbf{u}^{\mathsf{T}}\mathbf{C}\mathbf{u} = \lambda_{\max}

动态系统:反复拉扯,谁主导一切

如果同一张橡皮膜被拉了一次又一次,每次都施加同一个矩阵 A,膜上任一点的轨迹会怎样演化?这个问题对应着动态系统迭代 x_{k+1} = A x_k,而答案藏在特征分解里。假设 A 可对角化,把初始向量 x₀ 写成特征向量的线性组合 x₀ = c₁v₁ + c₂v₂,那么经过 k 步之后:

系统有三种命运:若最大的 |λ| > 1,系统爆炸式增长;若 0 < |λ| < 1,系统收敛到零;若 |λ| = 1,系统沿该方向保持大小不变或振荡。RNN 训练中反复乘以权重矩阵,特征值模大于 1 导致梯度爆炸、小于 1 导致梯度消失,正是这个原理;搜索引擎的 PageRank 也是靠幂迭代求转移矩阵的主特征向量。无论膜上的图案多复杂,拉上几百次之后,一切都将被“驯服”到最长的那条主筋方向上——这就是特征向量的终极魅力:一眼看穿矩阵的长期命运。

xk=c1λ1kv1+c2λ2kv2(两特征情形)\displaystyle \mathbf{x}_{k} = c_{1}\lambda_{1}^{k}\mathbf{v}_{1} + c_{2}\lambda_{2}^{k}\mathbf{v}_{2} \qquad (\text{两特征情形})
每作用一次矩阵,v₁ 方向就乘一个 λ₁、v₂ 方向就乘一个 λ₂。当 k 很大时,模最大的 λ 那一项增长或衰减得最快,其他项都变成“配角”。
  1. 初始分解把初始向量 x₀ 表示成特征向量 v₁、v₂ 的线性组合,系数 c₁、c₂ 由 x₀ 决定
    x0=c1v1+c2v2\displaystyle \mathbf{x}_{0} = c_{1}\mathbf{v}_{1} + c_{2}\mathbf{v}_{2}
  2. 幂作用特征向量Aᵏvᵢ = λᵢᵏvᵢ,因为每作用一次只是多乘一个 λᵢ
    Akvi=λikvi\displaystyle A^{k}\mathbf{v}_{i} = \lambda_{i}^{k}\mathbf{v}_{i}
  3. 代回演化把分解式代入 x_k = Aᵏx₀,逐项展开得到完整演化公式
    xk=c1λ1kv1+c2λ2kv2\displaystyle \mathbf{x}_{k} = c_{1}\lambda_{1}^{k}\mathbf{v}_{1} + c_{2}\lambda_{2}^{k}\mathbf{v}_{2}
  4. 主导项判据若 |λ₁| > |λ₂|,则 k 增大时 λ₁ᵏ 迅速压倒 λ₂ᵏ,x_k 被拽向 v₁ 方向
    ∣λ2k∣∣λ1k∣=(∣λ2∣∣λ1∣)k→0\displaystyle \frac{\lvert \lambda_{2}^{k} \rvert}{\lvert \lambda_{1}^{k} \rvert} = \left(\frac{\lvert \lambda_{2} \rvert}{\lvert \lambda_{1} \rvert}\right)^{k} \to 0

AI 应用场景

人脸识别中的“特征脸”降维

阶段:特征工程与数据预处理

解决的问题:一张 64×64 的人脸灰度图是 4096 维的向量,直接做距离计算既慢又容易被噪声干扰,传统逐像素比对在表情、光照变化面前非常脆弱。PCA 把人脸库看作“豆子堆”,求协方差矩阵的特征向量,取前几十个模最大的“特征脸”方向做投影,把每张脸压缩成几十个系数,在保留主要特征的同时滤掉噪声与冗余维度。

具体案例:在 LFW 人脸数据集上,把训练集的数千张人脸图拉平成列向量、零中心化,计算协方差矩阵并做特征分解,取前 30 个特征向量组成投影矩阵 W。新来一张测试人脸,只需计算它与 W 的投影系数,再用最近邻分类器判断身份,识别速度提升一个量级,准确率依然稳定。

搜索引擎 PageRank:马尔可夫链的主特征向量

阶段:模型推理与长期演化

解决的问题:网页重要性不能靠简单计数,因为被重要网页链接的页面更值得排名靠前。传统递归定义难以直接求解,而把整个互联网建模成转移矩阵(马尔可夫链),网页的长期访问概率恰好是转移矩阵最大特征值对应的特征向量,用幂迭代几十轮就能稳定收敛。

具体案例:搜索引擎对包含数十亿网页的稀疏转移矩阵做归一化处理,随机初始化一个概率向量,反复左乘转移矩阵。每轮迭代都让向量向主特征向量方向靠拢,几十次迭代后各网页的 PageRank 分数趋于稳定,取前 10 个排序返回给用户。

RNN 训练中的梯度消失与梯度爆炸

阶段:模型训练与优化

解决的问题:循环神经网络反向传播时,梯度沿时间步反复乘以权重矩阵 W,等价于反复施加同一个矩阵。如果 W 的特征值模大于 1,梯度指数级放大导致训练发散;模小于 1,梯度指数级衰减导致长距离信息丢失。传统全连接 RNN 难以学到长程依赖,根源就在这里。

具体案例:训练语言模型时,对权重矩阵做谱归一化,把最大特征值的模限制在 1 附近,梯度既不会爆炸也不会消失;LSTM 的“遗忘门”设计本质上是把状态转移矩阵的特征值刻意安排在 1 附近,让信息得以长距离流动。

Python 演示

python42 行
import numpy as np  def power_iteration(A, num_iter=100):    """幂迭代: 反复用矩阵作用向量, 收敛到模最大的特征值"""    n = A.shape[0]    v = np.random.randn(n)    v = v / np.linalg.norm(v)    for _ in range(num_iter):        Av = A @ v        lam = float(v @ Av)        v = Av / np.linalg.norm(Av)    return lam, v  def main():    A = np.array([[2.0, 1.0], [1.0, 2.0]])     lam, v = power_iteration(A)    print("幂迭代求最大特征值:", lam)    print("对应特征向量:", v)     vals, vecs = np.linalg.eig(A)    print("numpy 求出的全部特征值:", vals)    for i in range(len(vals)):        vi = vecs[:, i]        ok = np.allclose(A @ vi, vals[i] * vi)        print("验证 A v = lambda v 第 %d 组: %s" % (i + 1, ok))     rng = np.random.default_rng(0)    X = rng.multivariate_normal([2, 3], [[3.0, 1.5], [1.5, 1.0]], 200)    Xc = X - X.mean(axis=0)    C = np.cov(Xc.T)    evals, evecs = np.linalg.eigh(C)    pc = evecs[:, -1]    print("PCA 主成分方向:", pc)    proj = Xc @ pc    print("降维后样本数量:", proj.shape[0])  if __name__ == "__main__":    main()
目的:先用幂迭代手写求最大特征值,再用 numpy 求出全部特征值并逐组验证 Av = λv,最后对二维高斯数据做 PCA 提取主成分方向,覆盖本文核心知识的完整闭环。
  1. v = v / np.linalg.norm(v)每一步都归一化,防止向量长度随迭代爆炸
  2. Av = A @ v矩阵作用于当前向量,完成一次“拉膜”
  3. lam = float(v @ Av)瑞利商给出当前迭代下的特征值估计
  4. vals, vecs = np.linalg.eig(A)直接调用 numpy 求全部特征值与特征向量
  5. ok = np.allclose(A @ vi, vals[i] * vi)用定义 Av = λv 逐组验证计算结果
  6. C = np.cov(Xc.T)中心化后数据的协方差矩阵,是 PCA 的输入
  7. pc = evecs[:, -1]取最大特征值对应的特征向量,作为第一主成分方向
  8. proj = Xc @ pc把数据投影到主成分方向,完成降维

常见误区

误区既然 A·0 = λ·0 对任何 λ 都成立,那零向量当然是特征向量,每个矩阵都有“无数个特征向量”。

正解定义里明确要求 v ≠ 0。如果允许零向量,那么任意数 λ 都能满足等式,特征值就失去了筛选意义——就像考试里人人得满分,就无法区分水平。排除零向量后,每个特征值对应的特征向量才有资格成为“主筋方向”。

为何常见:等式 A·0 = λ·0 表面看确实成立,初学者容易只盯代数形式而忽略定义中的非零约束。

误区算出 λ = 0 就觉得“这个矩阵没有特征值了”,甚至认为矩阵“废了”。

正解λ = 0 是一个非常正常的特征值,它表示矩阵在该方向上的拉伸倍数是 0——把那个方向整个压扁。此时 A 不可逆(det(A) = 0),对应的特征向量恰好落在零空间里。比如对角矩阵 diag(3, 0),特征向量 (0, 1) 被压成零向量,特征值为 0 依然有效。

为何常见:“零”字容易让人联想到“没有”,实际它只是一个数值,特征值允许为负、为零、甚至为复数。

误区既然矩阵可以写成 A = PDP⁻¹,那所有矩阵都可以特征分解、都可以对角化。

正解对角化要求矩阵有 n 个线性无关的特征向量。剪切矩阵 [[1, 1], [0, 1]] 只有一个特征值 λ = 1,且只对应一个线性无关的特征向量 (1, 0),缺一个基向量,无法拼出可逆的 P。特征分解是“能力”而非“标配”,先判断特征向量够不够数。

为何常见:教材例题几乎都用特征值互不相同的好矩阵,给人“天下太平”的错觉,掩盖了特征值重复的退化情形。

误区看到 Av = λv 中输出和输入“不完全一样”,就觉得矩阵会把特征向量旋转一点点,只是转得少。

正解特征向量的定义要求方向严格不变(λ < 0 时也只是反向 180 度,仍然在同一条直线上)。任意向量乘以矩阵确实会转向,但特征向量偏偏是那个“豁免”——它只被拉长或压短。动画演示里,灰点与蓝点共线的瞬间,就是特征方向的精确时刻。

为何常见:平时见到的普通向量几乎都在旋转,把经验错误推广到特殊方向,忽略了“共线”这个苛刻前提。

面试题

Q1. 关于特征向量 v 与特征值 λ 的定义,下列说法正确的是?

单选题 · easy

  • A.特征向量必须是非零的向量← 正确答案
  • B.特征向量必须是零向量
  • C.特征向量必须是单位向量
  • D.特征向量必须是二维的向量

答案:A。定义 Av = λv 要求 v ≠ 0,排除零向量后方程才有筛选意义。特征向量可以是任意非零向量,不需要是单位向量,也不限于二维。单位向量只是归一化后的表示形式,维度由矩阵决定。

Q2. 对角矩阵 diag(3, 8) 的特征值是什么?

单选题 · easy

  • A.3 和 8,即对角线上元素← 正确答案
  • B.0 和 1,即单位阵的特征值
  • C.11 和 24,即和与积的结果
  • D.3 和 0,即第一列的元素

答案:A。对角矩阵的特征值就是对角线上的元素,因为 (A − λI) 的行列式是 (3−λ)(8−λ),根为 3 和 8。选项 C 的和与积是迹和行列式的值,不是特征值本身。这也是快速口算对角、三角矩阵特征值的技巧。

Q3. 特征值 λ 的几何含义是什么?

单选题 · easy

  • A.特征向量被拉伸的倍数值← 正确答案
  • B.矩阵行列式的结果数值
  • C.矩阵迹的计算结果数值
  • D.矩阵逆的模的长度数值

答案:A。在橡皮膜比喻中,λ 就是沿特征向量方向的拉伸倍数:大于 1 拉长、0 到 1 之间压缩、负数则反向。行列式是所有特征值的乘积、迹是特征值的和,它们是衍生性质而非几何本义。

Q4. 若矩阵 A 的特征值为 2 和 5,则 tr(A) 与 det(A) 分别是?

单选题 · mid

  • A.迹为 7,行列式为 10← 正确答案
  • B.迹为 10,行列式为 7
  • C.迹为 2,行列式为 5
  • D.迹为 7,行列式为 5

答案:A。特征值之和等于迹:2 + 5 = 7;特征值之积等于行列式:2 × 5 = 10。这两个是快速验证特征值计算是否出错的“快捷账单”,做题时先算这道题能避免低级失误。

Q5. 上三角矩阵 [[4, 2], [0, 6]] 的特征值是?

单选题 · mid

  • A.4 和 6,即对角线上的元素← 正确答案
  • B.2 和 0,即次对角线上的元素
  • C.8 和 24,即和与积的结果
  • D.6 和 4,即排序后的数值

答案:A。三角矩阵(上三角或下三角)的特征值就是对角线元素,因为 det(A − λI) = (4−λ)(6−λ) − 0。次对角线元素 2 不影响行列式,所以不是特征值。这条结论能大幅加快手算速度。

Q6. 矩阵 [[2, 1], [1, 2]] 的特征值与特征向量是?

单选题 · mid

  • A.λ=3 对应 (1,1),λ=1 对应 (1,−1)← 正确答案
  • B.λ=3 对应 (1,−1),λ=1 对应 (1,1)
  • C.λ=2 对应 (0,1),λ=1 对应 (1,0)
  • D.特征值 4 与 0,特征向量对应两坐标轴

答案:A。特征方程 λ² − 4λ + 3 = 0 得 λ = 3, 1。代回验证:A(1,1) = (3,3) = 3(1,1),A(1,−1) = (1,−1) = 1(1,−1)。选项 B 把对应关系搞反了,其余选项代入矩阵乘法都不满足 Av = λv。

Q7. 关于 Av = λv,下列说法正确的有?

多选题 · mid

  • A.特征向量作用后方向不变或反向← 正确答案
  • B.特征值可以是负数也可能为零← 正确答案
  • C.零向量不算特征向量的成员← 正确答案
  • D.每个方向作用后方向都会变

答案:ABC。特征向量只被拉伸,方向不变(λ 为负时反向 180 度仍在同一直线),A 对;特征值可正、可负、可为零,B 对;定义强制 v ≠ 0,C 对。D 恰恰相反,特征方向就是“方向不变”的例外,因此错误。

Q8. PCA 中第一个主成分对应的数学对象是?

单选题 · hard

  • A.协方差矩阵最大特征值对应特征向量← 正确答案
  • B.数据均值所在方向就是主方向
  • C.单位矩阵最大特征向量的方向
  • D.梯度上升最快的那个方向

答案:A。PCA 找的是数据投影后方差最大的方向,可证该方差等于 uᵀCu(C 为协方差矩阵),最大值恰为 C 的最大特征值,对应的 u 就是其特征向量。均值只是数据中心,单位矩阵的特征向量不含数据信息,梯度方向属于优化领域,都与 PCA 无关。

Q9. 关于矩阵可对角化的判断,下列说法正确的是?

多选题 · hard

  • A.有 n 个线性无关特征向量则能对角化← 正确答案
  • B.不同特征值对应特征向量必然线性无关← 正确答案
  • C.任意方阵都可以做特征分解
  • D.对角化后对角线元素正是特征值← 正确答案

答案:ABD。可对角化的充要条件是存在 n 个线性无关特征向量拼成可逆矩阵 P,A 对;定理保证不同特征值的特征向量必线性无关,B 对;对角矩阵 D 的对角元就是特征值,D 对。剪切矩阵这类特征值重复且特征向量不足的矩阵无法对角化,C 错。

Q10. 剪切矩阵 [[1, 1], [0, 1]] 的特征值只有 λ = 1,它有几个线性无关的特征向量?

单选题 · extreme

  • A.只有 1 个线性无关特征向量,不可对角化← 正确答案
  • B.有 2 个线性无关特征向量,可对角化
  • C.没有任何特征向量,矩阵已经退化
  • D.有无限个特征向量,自由选择对角化

答案:A。解 (A − I)v = 0 得方程 y = 0,特征向量形如 t(1, 0),只张成一维空间,凑不出 2 个线性无关向量,因此不可对角化。它毕竟有非零特征向量,不能选 C;所谓“无限个特征向量”只是同一方向的无数倍数,不增加线性无关个数。这个例子专治“所有矩阵都能对角化”的错觉。