计算向量和矩阵的范数
前言
在机器学习、数值计算与最优化理论的每一次“收敛”与“距离”背后,都站着同一位无名英雄——范数。它像一把万能标尺,把向量、矩阵、函数乃至抽象空间中的元素映射成可比较的非负实数,让“大小”“远近”“误差”有了严谨而统一的度量。本文用“定义→公式→示例→代码”四步曲,一次性梳理最常用的 3 种向量范数与 4 种矩阵范数。
一、范数
1.范数的定义
范数是把向量或更一般的数学对象映射到非负实数的“大小尺”,它严守非负且仅零元为零、齐次于数乘、满足三角不等式这三条公理,从而将直观的“长度”概念推广到矩阵、函数乃至抽象空间,支撑起有限维的欧几里得距离、无限维的 Lp 函数空间、算子理论中的矩阵范数以及概率测度上的收敛性,成为贯穿线性代数、泛函分析与最优化等学科的统一度量语言。
2.范数满足以下三个条件
(1)非负性:
∥x∥≥0,且 ∥x∥=0⟺x=0
(2)齐次性:
∥αx∥=∣α∣⋅∥x∥,对任意标量 α
(3)三角不等式:
∥x+y∥≤∥x∥+∥y∥
二、向量范数
1.曼哈顿范数
对于向量 X = ( x 1 , x 2 , … , x n ) X = (x_1, x_2, \dots, x_n) X=(x1,x2,…,xn)其曼哈顿范数定义为:
∥
x
∥
1
=
∑
i
=
1
n
∣
x
i
∣
\|\mathbf{x}\|_1 = \sum_{i=1}^n |x_i|
∥x∥1=i=1∑n∣xi∣即向量各分量绝对值的和
示例:
对于向量
x
=
(
3
,
−
4
,
5
)
\mathbf{x}=(3,-4,5)
x=(3,−4,5),
∥
x
∥
1
=
∣
3
∣
+
∣
−
4
∣
+
∣
5
∣
=
3
+
4
+
5
=
12
\|\mathbf{x}\|_1 = |3| + |-4| + |5| = 3 + 4 + 5 = 12
∥x∥1=∣3∣+∣−4∣+∣5∣=3+4+5=12
代码如下:
import numpy as np
x = np.array([3, -4, 5])
l1_norm = np.linalg.norm(x, ord=1)
print("x =", x)
print("‖x‖₁ =", int(l1_norm)) # 输出 12
2.欧几里得范数
对于向量
x
=
(
x
1
,
x
2
,
…
,
x
n
)
\mathbf{x}=(x_1,x_2,\dots,x_n)
x=(x1,x2,…,xn),其欧几里得范数定义为
∥
x
∥
2
=
∑
i
=
1
n
x
i
2
\|\mathbf{x}\|_2 = \sqrt{\sum_{i=1}^n x_i^2}
∥x∥2=i=1∑nxi2
示例
对向量
x
=
(
3
,
−
4
,
5
)
\mathbf{x}=(3,-4,5)
x=(3,−4,5),
∥
x
∥
2
=
3
2
+
(
−
4
)
2
+
5
2
=
9
+
16
+
25
=
50
=
5
2
\|\mathbf{x}\|_2 = \sqrt{3^2+(-4)^2+5^2}=\sqrt{9+16+25}=\sqrt{50}=5\sqrt{2}
∥x∥2=32+(−4)2+52=9+16+25=50=52
代码如下:
import numpy as np
x = np.array([3, -4, 5])
l2_norm = np.linalg.norm(x, ord=2)
print("x =", x)
print("‖x‖₂ = √50 =", l2_norm) # 7.0710678118654755
print("‖x‖₂ = 5√2 ≈", 5 * np.sqrt(2)) # 同上
3.无穷范数
对于向量
x
=
(
x
1
,
x
2
,
…
,
x
n
)
\mathbf{x}=(x_1,x_2,\dots,x_n)
x=(x1,x2,…,xn),其无穷范数定义为
∥
x
∥
∞
=
max
1
≤
i
≤
n
∣
x
i
∣
\|\mathbf{x}\|_\infty = \max_{1\le i\le n}|x_i|
∥x∥∞=1≤i≤nmax∣xi∣
示例:
对向量
x
=
(
3
,
−
4
,
5
)
\mathbf{x}=(3,-4,5)
x=(3,−4,5),
∥
x
∥
∞
=
max
(
∣
3
∣
,
∣
−
4
∣
,
∣
5
∣
)
=
5
\|\mathbf{x}\|_\infty = \max(|3|,|-4|,|5|) = 5
∥x∥∞=max(∣3∣,∣−4∣,∣5∣)=5
代码如下:
import numpy as np
x = np.array([3, -4, 5])
inf_norm = np.linalg.norm(x, ord=np.inf)
print("x =", x)
print("‖x‖∞ =", int(inf_norm)) # 输出5
三、矩阵范数
1.列和最大值
对于矩阵
A
=
[
a
i
j
]
m
×
n
A=[a_{ij}]_{m\times n}
A=[aij]m×n,其列和最大值定义为
∥
A
∥
1
=
max
1
≤
j
≤
n
∑
i
=
1
m
∣
a
i
j
∣
\|A\|_1 = \max_{1\le j\le n}\sum_{i=1}^m |a_{ij}|
∥A∥1=1≤j≤nmaxi=1∑m∣aij∣
示例:
对矩阵
A
=
[
1
2
3
4
]
A=\begin{bmatrix}1 & 2\\3 & 4\end{bmatrix}
A=[1324],
∥
A
∥
1
=
max
(
∣
1
∣
+
∣
3
∣
,
∣
2
∣
+
∣
4
∣
)
=
max
(
4
,
6
)
=
6
\|A\|_1 = \max\bigl(|1|+|3|,\ |2|+|4|\bigr) = \max(4,6) = 6
∥A∥1=max(∣1∣+∣3∣, ∣2∣+∣4∣)=max(4,6)=6
代码如下:
import numpy as np
A = np.array([[1, 2],
[3, 4]])
l1_norm = np.linalg.norm(A, ord=1) # 列和最大
print("A =\n", A)
print("‖A‖₁ =", l1_norm) # 输出6.0
2.行和最大值
对于矩阵
A
=
[
a
i
j
]
m
×
n
A=[a_{ij}]_{m\times n}
A=[aij]m×n,其行和最大值定义为
∥
A
∥
∞
=
max
1
≤
i
≤
m
∑
j
=
1
n
∣
a
i
j
∣
\|A\|_\infty = \max_{1\le i\le m}\sum_{j=1}^n |a_{ij}|
∥A∥∞=1≤i≤mmaxj=1∑n∣aij∣
示例:
对矩阵
A
=
[
1
2
3
4
]
A=\begin{bmatrix}1 & 2\\3 & 4\end{bmatrix}
A=[1324],
∥
A
∥
∞
=
max
(
∣
1
∣
+
∣
2
∣
,
∣
3
∣
+
∣
4
∣
)
=
max
(
3
,
7
)
=
7
\|A\|_\infty = \max\bigl(|1|+|2|,\ |3|+|4|\bigr) = \max(3,7) = 7
∥A∥∞=max(∣1∣+∣2∣, ∣3∣+∣4∣)=max(3,7)=7
代码如下:
import numpy as np
A = np.array([[1, 2],
[3, 4]])
inf_norm = np.linalg.norm(A, ord=np.inf) # 行和最大
print("A =\n", A)
print("‖A‖∞ =", inf_norm) # 输出7.0
3.谱范数
对于矩阵
A
∈
R
m
×
n
A\in\mathbb{R}^{m\times n}
A∈Rm×n,其谱范数定义为
∥
A
∥
2
=
λ
max
(
A
⊤
A
)
\|A\|_2 = \sqrt{\lambda_{\max}(A^\top A)}
∥A∥2=λmax(A⊤A)
其中
λ
max
(
A
⊤
A
)
\lambda_{\max}(A^\top A)
λmax(A⊤A) 是
A
⊤
A
A^\top A
A⊤A 的最大特征值。
示例:
设矩阵
A
=
[
1
2
3
4
]
A=\begin{bmatrix}1 & 2\\3 & 4\end{bmatrix}
A=[1324],则
给定矩阵
A
=
[
1
2
3
4
]
,
A = \begin{bmatrix} 1 & 2 \\ 3 & 4 \end{bmatrix},
A=[1324],
计算 Gram 矩阵
A
⊤
A
A^\top A
A⊤A:
-
写出转置
A ⊤ = [ 1 3 2 4 ] . A^\top = \begin{bmatrix} 1 & 3 \\ 2 & 4 \end{bmatrix}. A⊤=[1234]. -
逐元素相乘并累加
A ⊤ A = [ 1 3 2 4 ] [ 1 2 3 4 ] = [ 1 ⋅ 1 + 3 ⋅ 3 1 ⋅ 2 + 3 ⋅ 4 2 ⋅ 1 + 4 ⋅ 3 2 ⋅ 2 + 4 ⋅ 4 ] = [ 10 14 14 20 ] . \begin{aligned} A^\top A &= \begin{bmatrix} 1 & 3 \\ 2 & 4 \end{bmatrix} \begin{bmatrix} 1 & 2 \\ 3 & 4 \end{bmatrix} \\[6pt] &= \begin{bmatrix} 1\cdot1+3\cdot3 & 1\cdot2+3\cdot4 \\ 2\cdot1+4\cdot3 & 2\cdot2+4\cdot4 \end{bmatrix} \\[6pt] &= \begin{bmatrix} 10 & 14 \\ 14 & 20 \end{bmatrix}. \end{aligned} A⊤A=[1234][1324]=[1⋅1+3⋅32⋅1+4⋅31⋅2+3⋅42⋅2+4⋅4]=[10141420].
特征方程
det ( A ⊤ A − λ I ) = det [ 10 − λ 14 14 20 − λ ] = ( 10 − λ ) ( 20 − λ ) − 1 4 2 = λ 2 − 30 λ + 36 = 0 \det(A^\top A - \lambda I) = \det\begin{bmatrix} 10 - \lambda & 14 \\ 14 & 20 - \lambda \end{bmatrix} = (10 - \lambda)(20 - \lambda) - 14^2=\lambda^2-30\lambda+36=0 det(A⊤A−λI)=det[10−λ141420−λ]=(10−λ)(20−λ)−142=λ2−30λ+36=0
解得
λ = 30 ± 756 2 ≈ 29.798 , 0.202 \lambda=\frac{30\pm\sqrt{756}}{2}\approx 29.798,\;0.202 λ=230±756≈29.798,0.202
故
∥ A ∥ 2 = 29.798 ≈ 5.459 \|A\|_2=\sqrt{29.798}\approx 5.459 ∥A∥2=29.798≈5.459
import numpy as np
A = np.array([[1, 2],
[3, 4]])
sigma_max = np.linalg.norm(A, ord=2) # 谱范数
print("A =\n", A)
print("‖A‖₂ =", sigma_max) # 输出5.459...
4.弗罗贝尼乌斯范数
对于矩阵
A
=
[
a
i
j
]
m
×
n
A=[a_{ij}]_{m\times n}
A=[aij]m×n,其 弗罗贝尼乌斯范数定义为
∥
A
∥
F
=
∑
i
=
1
m
∑
j
=
1
n
a
i
j
2
\|A\|_F = \sqrt{\sum_{i=1}^m\sum_{j=1}^n a_{ij}^2}
∥A∥F=i=1∑mj=1∑naij2
示例
对
A
=
[
1
2
3
4
]
A=\begin{bmatrix}1 & 2\\3 & 4\end{bmatrix}
A=[1324],
∥
A
∥
F
=
1
2
+
2
2
+
3
2
+
4
2
=
30
≈
5.477
\|A\|_F = \sqrt{1^2+2^2+3^2+4^2} = \sqrt{30} \approx 5.477
∥A∥F=12+22+32+42=30≈5.477
代码如下:
import numpy as np
A = np.array([[1, 2],
[3, 4]])
fro_norm = np.linalg.norm(A, ord='fro') # 默认就是 Frobenius
print("A =\n", A)
print("‖A‖_F = √30 ≈", fro_norm) # 输出5.477225575051661
总结
范数作为线性空间与矩阵分析的核心度量工具,通过非负性、齐次性与三角不等式三大公理,将“长度”概念推广至任意高维与抽象对象;本文系统梳理向量 L₁(曼哈顿)、L₂(欧几里得)、L∞ (无穷)及矩阵列和、行和、谱与 Frobenius(弗罗贝尼乌斯) 共七种常用范数,可应用于稀疏建模、数值稳定性分析及最优化算法设计。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)