数学基础-范数

  • 范数的定义
  • $L_0$ 范数
  • $L_1$ 范数
  • $L_2$ 范数
  • $L_\infty $ 范数
  • Python实现

范数的定义

假设向量 $\boldsymbol{x}=[x_1, x_2, …, x_n]$,那么 向量 $\boldsymbol{x}$ 的 $L_p$ 范数定义如下:

$L_0$ 范数

当 $p=0$ 时,0范数为:

根据定义,0范数表示的是向量 $\boldsymbol{x}$ 中的非零元素的个数,其等价于 $|\boldsymbol{x}|_{0}=\operatorname{Count}(\{i | x_{i} \not= 0\})$。

$L_1$ 范数

当 $p=1$ 时,1范数为:

L1范数有很多的名字,例如我们熟悉的曼哈顿距离、最小绝对误差等。使用L1范数可以度量两个向量间的差异,如绝对误差和(Sum of Absolute Difference):

$L_2$ 范数

当 $p=2$ 时,2范数为:

像 L1 范数一样,L2 也可以度量两个向量间的差异,如平方差和(Sum of Squared Difference):

无穷范数

当 $p=\infty$ 时,就是我们常说的无穷范数

Python 实现

Python 里面的这个库 linalg=linear里面有范数的计算,可以这么记这个库的名字:

linalg = linear(线性)+algebra(代数),norm则表示范数。

1
x_norm=np.linalg.norm(x, ord=None, axis=None, keepdims=False)

简单列一个表:

参数 说明 计算
默认 L2 范数 $\sqrt{x_1^2+x_2^2+\ldots+x_n^2}$
ord=2 L2 范数 同上
ord=1 L1 范数 $\lvert x_1 \rvert +\lvert x_2 \rvert+\ldots+\lvert x_n \rvert$
ord=np.inf 无穷范数 $\max(\{\lvert x_1 \rvert, \lvert x_2 \rvert, …, \lvert x_n \rvert\})$

代码示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import numpy as np

a = np.array([3, 4])

print("keepdims = False")
print(np.linalg.norm(a))
print(np.linalg.norm(a, ord=1))
print(np.linalg.norm(a, ord=2))
print(np.linalg.norm(a, ord=np.inf))

print("\nkeepdims = True")
print(np.linalg.norm(a, keepdims=True))
print(np.linalg.norm(a, ord=1, keepdims=True))
print(np.linalg.norm(a, ord=2, keepdims=True))
print(np.linalg.norm(a, ord=np.inf, keepdims=True))

输出结果为:

1
2
3
4
5
6
7
8
9
10
11
keepdims = False
5.0
7.0
5.0
4.0

keepdims = True
[5.]
[7.]
[5.]
[4.]

需要注意的是,linalg这个库里面矩阵的范数和向量的范数不太一样,这一点目前没用到,以后如有需要再深究。

Thanks for rewarding