前言

  在机器学习、数值计算与最优化理论的每一次“收敛”与“距离”背后,都站着同一位无名英雄——范数。它像一把万能标尺,把向量、矩阵、函数乃至抽象空间中的元素映射成可比较的非负实数,让“大小”“远近”“误差”有了严谨而统一的度量。本文用“定义→公式→示例→代码”四步曲,一次性梳理最常用的 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| x1=i=1nxi即向量各分量绝对值的和
示例:
对于向量 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 x1=∣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} x2=i=1nxi2

示例
对向量 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} x2=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=1inmaxxi

示例:
对向量
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}| A1=1jnmaxi=1maij

示例:
对矩阵 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 A1=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=1immaxj=1naij

示例:
对矩阵 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} ARm×n,其谱范数定义为
∥ A ∥ 2 = λ max ⁡ ( A ⊤ A ) \|A\|_2 = \sqrt{\lambda_{\max}(A^\top A)} A2=λmax(AA)
其中 λ max ⁡ ( A ⊤ A ) \lambda_{\max}(A^\top A) λmax(AA) A ⊤ A A^\top A AA 的最大特征值。

示例:
设矩阵 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 AA

  1. 写出转置
    A ⊤ = [ 1 3 2 4 ] . A^\top = \begin{bmatrix} 1 & 3 \\ 2 & 4 \end{bmatrix}. A=[1234].

  2. 逐元素相乘并累加
    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} AA=[1234][1324]=[11+3321+4312+3422+44]=[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(AAλI)=det[10λ141420λ]=(10λ)(20λ)142=λ230λ+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 A2=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} AF=i=1mj=1naij2

示例
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 AF=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(弗罗贝尼乌斯) 共七种常用范数,可应用于稀疏建模、数值稳定性分析及最优化算法设计。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐