zoukankan      html  css  js  c++  java
  • p范数(p norm)

    先回顾一下范数的定义(en.wikipedia.org/wiki/Norm_(mathematics)):

    Given a vector space V over a subfield F of the complex numbers, a norm on V is a function p: VR with the following properties:[1]

    For all aF and all u, vV,

    1. p(av) = |a| p(v), (absolute homogeneity or absolute scalability).
    2. p(u + v) ≤ p(u) + p(v) (triangle inequality or subadditivity).
    3. If p(v) = 0 then v is the zero vector (separates points).

    By the first axiom, absolute homogeneity, we have p(0) = 0 and p(-v) = p(v), so that by the triangle inequality

    p(v) ≥ 0 (positivity).

    经常会听到p范数(p norm)的说法,其实很简单,可以看成2范数的扩展,但是有一点需要注意:p的范围是[1, inf)p在(0,1)范围内定义的并不是范数因为违反了三角不等式(||x+y|| <= ||x|| + ||y||,此处x和y是向量,后面出现x和y的地方也是向量,不再赘述。见下面wikipedia的截图

     

    在p范数下定义的单位球(unit ball)都是凸集(convex set,简单地说,若集合A中任意两点的连线段上的点也在集合A中,则A是凸集),但是当0<p<1时,在该定义下的unit ball并不是凸集(注意:我们没说在该范数定义下,因为如前所述,0<p<1时,并不是范数).下图展示了p取不同值时unit ball的形状

    当0<p<1时,上面类似p范数的定义不能对任意两点满足三角不等式,也就是说,存在两点,它们不满足三角不等式。这个论断证明起来很简单,只要找出两个这样的点就行了。

    在一维空间中,按照p范数的定义,三角不等式总是成立。于是我们可以考虑在二维空间选点(因为二维空间比较简单),考虑特殊一点的,比如,取x=(0,1), y=(1,0)

    ||x|| = 1, ||y|| = 1,||x+y|| = 2^(1/p) > 2 == ||x|| + ||y||,这就是一个违反三角不等式的例子,证毕。

    对于更高维空间都可以取类似的例子,比如三维就取(0,0,1), (0, 1, 0), (1,0,0)

    下面的python(ver 2.7)代码可以用来画p取不同值时的unit ball:

    import numpy as np
    from matplotlib.pyplot import *
    
    figure(); hold(True)
    r = 1
    linestyle = ['b-','k-','m-','r-','y-']
    p_values = (0.25, 0.5, 1, 2, 4)
    for i,p in enumerate(p_values):
        x = np.arange(-r,r+1e-5,1/128.0)
        y = (r**p - (abs(x)**p))**(1.0/p)
        y = zip(y, -y)
        plot(x, y, linestyle[i], label=str(i))
    axis('equal')
    show()

    结果是这样的(由内到外p逐渐增大,蓝线代表p=0.25,黄线代表p=4):

    --

    第一个图是截图后用MyPaint做的标记(红线),这是一个ubuntu(Linux)平台上类似于window画图的工具,比较轻量级,找了我好一会……

  • 相关阅读:
    Martin Fowler关于IOC和DI的文章(原版)
    父类引用指向子类对象详解
    求中位数总结
    二叉树的遍历方法
    MySQL知识小结
    栈和队列的基础算法学习(EPI)
    链表的基础题目学习(EPI)
    数组和字符串的基础题目学习(EPI)
    基本类型算法题目学习(EPI)
    被C语言操作符优先级坑了
  • 原文地址:https://www.cnblogs.com/fstang/p/4197120.html
Copyright © 2011-2022 走看看