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