python数值计算库Numpy学习之—np.linalg.norm(求范数)

    Numpy在python中是非常著名的一个数值计算类型的库,在线性代数里面的矩阵求和、求逆、求距离、求范数等等,都有很友好的支持,今天正好再一次用到了它的范数求解操作,就专门找一点时间总结了一下,备忘,下面是具体的实现,参数解释以及代码注释都已经比较详细了就不多再解释了:

#!usr/bin/env python
#encoding:utf-8


'''
__Author__:沂水寒城
功能: 基于numpy计算范数
'''

import sys
reload(sys)
import numpy as np
sys.setdefaultencoding('utf-8')



def testFunc():
    '''
    linalg=linear(线性)+algebra(代数)
    norm则表示范数
    接口调用:
    np.linalg.norm(data, ord=None, axis=None, keepdims=False)
    data:数据矩阵(一维或者二维)
    ord:求解的范数类型(默认为二范数)
          ord=1:列和的最大值
          ord=2:|λE-ATA|=0,求特征值,然后求最大特征值得算术平方根
          ord=∞:行和的最大值
    axis:处理类型
          axis=1表示按行向量处理,求多个行向量的范数
          axis=0表示按列向量处理,求多个列向量的范数
          axis=None表示矩阵范数。
    keepding:是否保持矩阵的二维特性
              True 保持
              False 不保持
    '''
    data=np.array(range(36))
    data=data.reshape(6,6)
    print u"行向量的1范数:  "
    print u"不保留矩阵二维特性:  ",np.linalg.norm(data,ord=1,axis=1)
    print u"保留矩阵二维特性:  ",np.linalg.norm(data,ord=1,axis=1,keepdims=True)

    print u"行向量的2范数:  "
    print u"不保留矩阵二维特性:  ",np.linalg.norm(data,axis=1)
    print u"保留矩阵二维特性:  ",np.linalg.norm(data,axis=1,keepdims=True)

    print u"行向量的∞范数:  "
    print u"不保留矩阵二维特性:  ",np.linalg.norm(data,ord=np.inf,axis=1)
    print u"保留矩阵二维特性:  ",np.linalg.norm(data,ord=np.inf,axis=1,keepdims=True)

    print u"列向量的1范数:  "
    print u"不保留矩阵二维特性:  ",np.linalg.norm(data,ord=1,axis=0)
    print u"保留矩阵二维特性:  ",np.linalg.norm(data,ord=1,axis=0,keepdims=True)

    print u"列向量的2范数:  "
    print u"不保留矩阵二维特性:  ",np.linalg.norm(data,axis=0)
    print u"保留矩阵二维特性:  ",np.linalg.norm(data,axis=0,keepdims=True)

    print u"列向量的∞范数:  "
    print u"不保留矩阵二维特性:  ",np.linalg.norm(data,ord=np.inf,axis=0)
    print u"保留矩阵二维特性:  ",np.linalg.norm(data,ord=np.inf,axis=0,keepdims=True)

    print u"矩阵1范数: "
    print u"不保留矩阵二维特性:  ",np.linalg.norm(data,ord=1)
    print u"保留矩阵二维特性:  ",np.linalg.norm(data,ord=1,keepdims=True)

    print u"矩阵2范数: "
    print u"不保留矩阵二维特性:  ",np.linalg.norm(data,ord=2,)
    print u"保留矩阵二维特性:  ",np.linalg.norm(data,ord=2,keepdims=True)

    print u"矩阵∞范数: "
    print u"不保留矩阵二维特性:  ",np.linalg.norm(data,ord=np.inf)
    print u"保留矩阵二维特性:  ",np.linalg.norm(data,ord=np.inf,keepdims=True)



if __name__=='__main__':
    testFunc()

       上述代码在python2.7环境下测试通过,结果如下:

行向量的1范数:  
不保留矩阵二维特性:   [ 15.  51.  87. 123. 159. 195.]
保留矩阵二维特性:   [[ 15.]
 [ 51.]
 [ 87.]
 [123.]
 [159.]
 [195.]]
行向量的2范数:  
不保留矩阵二维特性:   [ 7.41619849 21.23676058 35.76310948 50.38849075 65.04613747 79.71825387]
保留矩阵二维特性:   [[ 7.41619849]
 [21.23676058]
 [35.76310948]
 [50.38849075]
 [65.04613747]
 [79.71825387]]
行向量的∞范数:  
不保留矩阵二维特性:   [ 5. 11. 17. 23. 29. 35.]
保留矩阵二维特性:   [[ 5.]
 [11.]
 [17.]
 [23.]
 [29.]
 [35.]]
列向量的1范数:  
不保留矩阵二维特性:   [ 90.  96. 102. 108. 114. 120.]
保留矩阵二维特性:   [[ 90.  96. 102. 108. 114. 120.]]
列向量的2范数:  
不保留矩阵二维特性:   [44.49719092 46.54030511 48.62098312 50.73460358 52.87721627 55.04543578]
保留矩阵二维特性:   [[44.49719092 46.54030511 48.62098312 50.73460358 52.87721627 55.04543578]]
列向量的∞范数:  
不保留矩阵二维特性:   [30. 31. 32. 33. 34. 35.]
保留矩阵二维特性:   [[30. 31. 32. 33. 34. 35.]]
矩阵1范数: 
不保留矩阵二维特性:   120.0
保留矩阵二维特性:   [[120.]]
矩阵2范数: 
不保留矩阵二维特性:   121.99726466378695
保留矩阵二维特性:   [[121.99726466]]
矩阵∞范数: 
不保留矩阵二维特性:   195.0
保留矩阵二维特性:   [[195.]]

猜你喜欢

转载自blog.csdn.net/Together_CZ/article/details/84489785