python數值計算庫Numpy學習之—np.linalg.norm(求範數)
阿新 • • 發佈:2018-12-08
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.]]