一文看懂矩阵的秩和奇异值及python计算

1. 矩阵的秩

1.1 什么是矩阵的秩(Rank)?

矩阵的秩是指其行(或列)向量的线性无关个数。也可以理解为:

一个矩阵所包含的"有效信息维度"。

1.2 什么是"低秩矩阵"?

如果一个矩阵的秩远小于其维度(比如一个 4000×4000 的矩阵,秩为几十到几百),我们就说它是低秩的。 直观理解:

  • 这个矩阵中大多数信息可以用较少的"主成分"表示;
  • 所以它可以被压缩或近似为两个更小的矩阵相乘。

1.3 如何计算矩阵的秩

我们主要有以下三种方法来"推导"或计算一个矩阵的秩:

方法 原理 特点
① 行列简化法(初等行变换) 化简为阶梯形矩阵,非零行数即为秩 直观常见
② 最大非零子式法 找到最大阶数的非零子式(行列式不为0) 理论性强
③ 奇异值分解法(SVD) 计算非零奇异值个数 数值计算最稳定,适合浮点矩阵

方法1: 用行变换推导矩阵秩

我们用最直观的"初等行变换"的方法来推导一个矩阵的秩。示例如下:
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"> A = [ 1 2 3 2 4 6 1 1 1 ] A = \begin{bmatrix} 1 & 2 & 3 \\ 2 & 4 & 6 \\ 1 & 1 & 1 \end{bmatrix} </math>A= 121241361

***Step1:***进行初等行变换(化为行阶梯形)

我们使用高斯消元法简化:

python 复制代码
R1: [1 2 3]
R2: [2 4 6]   → R2 - 2*R1 = [0 0 0]
R3: [1 1 1]   → R3 - R1 = [0 -1 -2]

得到新的矩阵:
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"> A ′ = [ 1 2 3 0 0 0 0 − 1 − 2 ] A' = \begin{bmatrix} 1 & 2 & 3 \\ 0 & 0 & 0 \\ 0 & -1 & -2 \end{bmatrix} </math>A′= 10020−130−2

继续变换 R3:

python 复制代码
交换 R2 和 R3

<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"> A ′ ′ = [ 1 2 3 0 − 1 − 2 0 0 0 ] A'' = \begin{bmatrix} 1 & 2 & 3 \\ 0 & -1 & -2 \\ 0 & 0 & 0 \end{bmatrix} </math>A′′= 1002−103−20

现在是阶梯形矩阵 ,共有两个非零行 → 秩 = 2

方法2: 用 NumPy 验证秩计算

python 复制代码
import numpy as np

A = np.array([[1, 2, 3],
              [2, 4, 6],
              [1, 1, 1]])

rank = np.linalg.matrix_rank(A) # 计算矩阵的秩,一行代码解决
print("矩阵的秩为:", rank)

输出:

复制代码
矩阵的秩为:2

1.4 判断矩阵是否低秩?

通常可以通过奇异值分解(SVD) 判断。 如果一个矩阵的大部分奇异值(singular values)非常小或为 0,那就说明它是 低秩或近似低秩的。下面由讲解如何使用python求解矩阵奇异值。

同时也可以根据先计算出矩阵的秩,如果它的秩远小于矩阵的维度,也可以算作 低秩 ,这个概念没有明确的定义。

2. 矩阵的奇异值

2.1 什么是矩阵的奇异值?

奇异值是描述一个矩阵在变换空间中"拉伸"能力的重要量。

具体来说,对于一个任意形状的实矩阵 <math xmlns="http://www.w3.org/1998/Math/MathML"> A ∈ R m × n A∈\mathbb{R}^{m×n} </math>A∈Rm×n ,奇异值是它的**奇异值分解(Singular Value Decomposition, SVD)**中的核心部分:
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"> A = U Σ V T A=UΣV^T </math>A=UΣVT

其中:

  • <math xmlns="http://www.w3.org/1998/Math/MathML"> U ∈ R m × m U ∈ \mathbb{R} ^ {m×m} </math>U∈Rm×m:左奇异向量组成的正交矩阵
  • <math xmlns="http://www.w3.org/1998/Math/MathML"> Σ ∈ R m × n Σ ∈ \mathbb{R}^{m×n} </math>Σ∈Rm×n:对角矩阵,对角线上的非负实数就是奇异值(通常记作 σ1,σ2, ...)
  • <math xmlns="http://www.w3.org/1998/Math/MathML"> V ⊤ ∈ R n × n V^⊤∈ \mathbb{R} ^ {n×n} </math>V⊤∈Rn×n:右奇异向量组成的正交矩阵

2.2 奇异值的直观意义

奇异值描述了矩阵 AAA 将单位球体拉伸成椭球体时,各个轴的"拉伸长度"。

  • 最大奇异值 σ1:表示矩阵将输入拉伸得最多的方向的尺度
  • 最小奇异值 σn:表示最小拉伸(甚至是压缩)的方向尺度
  • 若很多奇异值接近0,说明矩阵有大量"无效方向",即可以近似看作低秩

2.3 举例矩阵奇异值计算

示例 1:普通矩阵的奇异值

python 复制代码
python


复制编辑
import numpy as np

# 例子:一个 3x3 的矩阵
A = np.array([[3, 1, 1],
              [-1, 3, 1],
              [0, 0, 1]])

# 计算奇异值
singular_values = np.linalg.svd(A, compute_uv=False) # 求解矩阵的奇异值

print("奇异值:", singular_values)

输出(可能略有数值波动):

css 复制代码
奇异值: [4.2361, 2.6180, 0.5546]

解释:

  • 矩阵 AAA 在某个方向上会将输入放大约 4.2 倍,在另一些方向上只放大 0.5 倍
  • 奇异值大小差距越大,矩阵越接近"低秩"结构

示例 2:完全低秩矩阵

python 复制代码
python


复制编辑
B = np.array([[1, 2],
              [2, 4],
              [3, 6]])  # 第2列是第1列的2倍,秩=1

singular_values_B = np.linalg.svd(B, compute_uv=False)

print("奇异值(低秩矩阵):", singular_values_B)

输出:

css 复制代码
奇异值(低秩矩阵): [9.5255, 0.]

解释:

  • 只有一个非零奇异值,表示这个矩阵可以"压缩"到一个方向(秩为 1)

2.4 奇异值的作用

应用领域 用途
PCA 主成分分析 保留最大的奇异值方向,相当于降维
图像压缩 舍弃小奇异值可重建图像而减少数据量
推荐系统 对评分矩阵做SVD → 分解出用户和物品潜在因子
神经网络 判断权重矩阵是否稀疏 or 低秩,可用于参数压缩,如:DCN- M网络就用到该理论进行地秩序分解

总结一句话:

奇异值是衡量一个矩阵"在哪些方向上作用强、在哪些方向上没用"的关键量。它们揭示了矩阵的结构、压缩能力以及在机器学习中的可降维性。

以上就是关于矩阵的秩和奇异值的介绍,如果感觉还不错的话,请帮忙点个赞吧! 感谢!!!

相关推荐
我感觉。15 分钟前
【深度学习—李宏毅教程笔记】各式各样的 Attention
人工智能·深度学习·attention·self-attention
半桔17 分钟前
C++11特性补充
开发语言·数据结构·c++·算法·c++11
希陌ximo42 分钟前
GPU选型大对决:4090、A6000、L40谁才是AI推理的最佳拍档?
人工智能·算法·支持向量机·排序算法·推荐算法·迭代加深
IceTeapoy1 小时前
【RL】强化学习入门(一):Q-Learning算法
人工智能·算法·强化学习
艾醒1 小时前
探索大语言模型(LLM):ReAct、Function Calling与MCP——执行流程、优劣对比及应用场景
算法
智者知已应修善业1 小时前
2021-11-14 C++三七二十一数
c语言·c++·经验分享·笔记·算法·visual studio
艾醒1 小时前
探索大语言模型(LLM):Transformer 与 BERT从原理到实践
算法
艾醒1 小时前
探索大语言模型(LLM):循环神经网络的深度解析与实战(RNN、LSTM 与 GRU)
算法
艾醒1 小时前
探索大语言模型(LLM):马尔可夫链——从诗歌分析到人工智能的数学工具
深度学习·算法