1. 程式人生 > >python數值計算庫Numpy學習之—np.linalg.norm(求範數)

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.]]