x_norm=np.linalg.norm(x, ord=None, axis=None, keepdims=False)
①x: 表示矩阵(也可以是一维)
②ord:范数类型
向量的范数:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SdJnt2Ea-1597632418751)(attachment:image.png)]
矩阵的范数:
ord=1:列和的最大值
ord=2:|λE-ATA|=0,求特征值,然后求最大特征值得算术平方根(matlab在线版,计算ans=ATA,[x,y]=eig(ans),sqrt(y),x是特征向量,y是特征值)
ord=∞:行和的最大值
ord=None:默认情况下,是求整体的矩阵元素平方和,再开根号。(没仔细看,以为默认情况下就是矩阵的二范数,修正一下,默认情况下是求整个矩阵元素平方和再开根号)
③axis:处理类型
axis=1表示按行向量处理,求多个行向量的范数
axis=0表示按列向量处理,求多个列向量的范数
axis=None表示矩阵范数。
④keepding:是否保持矩阵的二维特性
True表示保持矩阵的二维特性,False相反
import numpy as np
x = np.array([
[0, 3, 4],
[1, 6, 4]])
#默认参数ord=None,axis=None,keepdims=False
print("默认参数(矩阵整体元素平方和开根号,不保留矩阵二维特性):",np.linalg.norm(x))
默认参数(矩阵整体元素平方和开根号,不保留矩阵二维特性): 8.831760866327848
print("矩阵整体元素平方和开根号,保留矩阵二维特性:",np.linalg.norm(x,keepdims=True))
矩阵整体元素平方和开根号,保留矩阵二维特性: [[8.83176087]]
print("矩阵每个行向量求向量的2范数:",np.linalg.norm(x,axis=1,keepdims=True))
print("矩阵每个列向量求向量的2范数:",np.linalg.norm(x,axis=0,keepdims=True))
矩阵每个行向量求向量的2范数: [[5. ]
[7.28010989]]
矩阵每个列向量求向量的2范数: [[1. 6.70820393 5.65685425]]
print("矩阵1范数:",np.linalg.norm(x,ord=1,keepdims=True))
矩阵1范数: [[9.]]
print("矩阵2范数:",np.linalg.norm(x,ord=2,keepdims=True))
矩阵2范数: [[8.70457079]]
print("矩阵∞范数:",np.linalg.norm(x,ord=np.inf,keepdims=True))
矩阵∞范数: [[11.]]
print("矩阵每个行向量求向量的1范数:",np.linalg.norm(x,ord=1,axis=1,keepdims=True))
矩阵每个行向量求向量的1范数: [[ 7.]
[11.]]
import numpy as np
a = np.arange(9) - 4
print(a)
[-4 -3 -2 -1 0 1 2 3 4]
b = a.reshape((3, 3))
print(b)
[[-4 -3 -2]
[-1 0 1]
[ 2 3 4]]
print(np.linalg.norm(a))
7.745966692414834
print(np.linalg.norm(b))
7.745966692414834
print(np.linalg.norm(b, 'fro'))
7.745966692414834
print(np.linalg.norm(b, 'nuc'))
9.797958971132713
print(np.linalg.norm(a, np.inf))
4.0
print(np.linalg.norm(a, -np.inf))
0.0
print(np.linalg.norm(a, 1))
20.0
print(np.linalg.norm(b, np.inf, axis=1))
[4. 1. 4.]
print(np.linalg.norm(b, -np.inf, axis=0))
[1. 0. 1.]
print(np.linalg.norm(b, 1))
7.0