numpy 中范数的计算

numpy 中范数的计算

首先,构建一个简单的矩阵

 1>>> import numpy as np
2
3>>> X = np.array([[1,1,1],[2,2,2],[3,3,3]])
4
5>>> X
6array([[111],
7       [222],
8       [333]])
9
10>>> X**2
11array([[111],
12       [444],
13       [999]], dtype=int32)

二范数

默认二范数计算

1>>> np.linalg.norm(X)  # 计算矩阵范数
26.48074069840786
3
4>>> np.linalg.norm(X, axis=0)  # 按列向量计算范数
5array([3.741657393.741657393.74165739])
6
7>>> np.linalg.norm(X, axis=1)  # 按行向量计算范数
8array([1.732050813.464101625.19615242])

直接调用上面的方法等价于下面的计算过程

1>>> np.sqrt(np.sum(X**2))  # 对整个矩阵计算平方和然后开平方根
26.48074069840786
3
4>>> np.sqrt(np.sum(X**2, axis=0))  # 按列计算平方和后开平方根
5array([3.741657393.741657393.74165739])
6
7>>> np.sqrt(np.sum(X**2, axis=1))  # 按行计算平方和后开平方根
8array([1.732050813.464101625.19615242])

方法原型

numpy.linalg.norm(x, ord=None, axis=None, keepdims=False)

上面只用到了参数 x 放置数据,和参数 axis 指定计算的轴。另一个参数 ord 指按照第几范数计算,它包含下面这些值:

ord norm for matrices norm for vectors
None Frobenius norm 2-norm
‘fro’ Frobenius norm
‘nuc’ nuclear norm
inf max(sum(abs(x), axis=1)) max(abs(x))
-inf min(sum(abs(x), axis=1)) min(abs(x))
0 sum(x != 0)
1 max(sum(abs(x), axis=0)) as below
-1 min(sum(abs(x), axis=0)) as below
2 2-norm (largest sing. value) as below
-2 smallest singular value as below
other sum(abs(x)**ord)**(1./ord)

官方文档跳转
https://docs.scipy.org/doc/numpy/reference/generated/numpy.linalg.norm.html