范数、矩阵范数到 numpy 范数函数

向量范数

范数(norm),是具有“长度”概念的函数 p p 。在线性代数、泛函分析及相关的数学领域,是一个函数,其为向量空间内的所有向量赋予非零的正长度或大小。半范数反而可以为非零的向量赋予零长度。它是欧几里得空间中长度的推广。

举一个简单的例子,一个二维度的欧氏几何空间 2 R 2 就有欧氏范数。在这个向量空间的元素(譬如:(3,7))常常在笛卡儿坐标系统被画成一个从原点出发的箭号。每一个向量的欧氏范数就是箭号的长度。

定义

范数是一个由向量域指向实数域的函数,满足三个性质:

  1. 半正定性 p(v)0 p ( v ) ≥ 0
  2. 绝对一次齐次性 p(av)=|a|p(v) p ( a v ) = | a | p ( v )
  3. 三角不等式 p(u+v)p(u)+p(v) p ( u + v ) ≤ p ( u ) + p ( v )

如果范数是半范数还要加上一个额外的性质才能成为范数:

  • p(v)=0 p ( v ) = 0 ,当且仅当 v v 是零向量

满足这 3 + 1 的性质的范数及其向量空间被称为赋范向量空间。

例子

绝对值范数

x=|x| ‖ x ‖ = | x |
是在由实数或虚数构成的一维向量中的范数。

曼哈顿范数

两点之间之间线段形成线段对轴产生的投影的距离总和。一般表示城市区块之间距离,绝对值是曼哈顿范数的特殊情况。
范数、矩阵范数到 numpy 范数函数_第1张图片

欧几里得范数

就是某点到原点之间距离。
x:=x21++x2n ‖ x ‖ := x 1 2 + ⋯ + x n 2

p-范数

p-范数的定义如下:

xp:=(ni=1|xi|p)1/p ‖ x ‖ p := ( ∑ i = 1 n | x i | p ) 1 / p (p 不在(0,1)范围内)

可见当 p 为 2 的时候是欧几里得范数。

矩阵范数

考虑系数域 K K (可以是实数域或者复数域), m×n m × n 矩阵的向量空间实际上就是有 m * n 维的向量空间。就可和其他的向量一样,为其装备上一个范数。

如果可以给矩阵空间也建立成赋范向量空间,那就需要矩阵范数。矩阵范数也必须满足如上文所示的 3 + 1 个性质。矩阵范数用 ‖ ⋅ ‖ 表示

另外如果矩阵是个方阵,还需要满足:

  • 一致性: ABAB ‖ A B ‖ ≤ ‖ A ‖ ‖ B ‖
  • 共轭转置(实矩阵就是转置)相等: A=AH ‖ A ‖ = ‖ A H ‖

例子

矩阵元范数

这种范数将矩阵看做一个 m×n m × n 向量。并且使用类似向量范数的范数,比如 p-范数:

Ap=(mi=1nj=1|aij|p)1/p ‖ A ‖ p = ( ∑ i = 1 m ∑ j = 1 n | a i j | p ) 1 / p

弗罗贝尼乌斯范数(Frobenius norm / Hilbert–Schmidt norm)

定义方法有多种,最容易理解的就是:

AF=mi=1nj=1|aij|2 ‖ A ‖ F = ∑ i = 1 m ∑ j = 1 n | a i j | 2

也是编程中非常常用的范数。类似欧氏长度。

其他还有:

AF=trace(AA)=min{m,n}i=1σ2i ‖ A ‖ F = trace ⁡ ( A ∗ A ) = ∑ i = 1 min { m , n } σ i 2

极大值范数

当 p-范数 p 为正无穷的时候可以得到:

Amax=max{|aij|} ‖ A ‖ m a x = max { | a i j | }

求得是分量最大值。

注意:python 里面的 inf 系列范数与此有所不同。

numpy.linalg.norm

numpy 提供的求范数函数。可以求矩阵范数和向量范数。

原型:

numpy.linalg.norm(x, ord=None, axis=None, keepdims=False)

参数:

  • x:一个 ndarray,如果axis填了None,这个 x 则必须是 1 维或者 2 维的。
  • ord: 可选的参数有 {non-zero int, inf, -inf, ‘fro’, ‘nuc’}。这里的inf 代表着 numpy 的无穷对象(正无穷和负无穷)。
  • axis:可选的参数有 {int, 2-tuple of ints, None},如果是一个 int 那规定着是按0:列向量还是1:行向量来计算向量范数。如果是一个二元的 tuple,它指定两个维度,按照这两个维度来规定一层层的矩阵,按照矩阵计算矩阵范数。如果None,返回的结果根据 x 的维度(1 维或 2维)来计算向量范数或矩阵范数。
  • keepdims:会保持传入 x 的维度,比如说传入了一个二维的矩阵(3行3列)的,按列进行了矢量范数的计算,那么得到的结果依然是二维的,只不过变成了(1行3列)。

返回值

一个浮点数或者 ndarray。

ord

ord 矩阵范数 向量范数
None 弗罗贝尼乌斯范数 欧几里得范数
‘fro’ 弗罗贝尼乌斯范数
‘nuc’ nuclear 范数
inf max(sum(abs(x), axis=1)) max(abs(x))
-inf min(sum(abs(x), axis=1)) min(abs(x))
0 sum(x != 0)
1 max(sum(abs(x), axis=0)) as below
-1 min(sum(abs(x), axis=0)) as below
2 2-norm (largest sing. value) as below
-2 smallest singular value as below
other sum(abs(x)**ord)**(1./ord)

你可能感兴趣的:(学术笔记本)