numpy基础总结

numpy.linalg.norm

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

其中x可以传入array,也可以是matrix。

ord参数针对x是array还是matrix是不一样的计算:

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) L2范数
-2 smallest singular value as below
other sum(abs(x)ord)(1./ord)

如果传入axis这个参数,axis=0表示每一列为向量,以每一列的向量为基础计算。然后就转化为了向量运算。

其中keepdims如果是True,那么规范化的轴将作为尺寸1留在结果中,使用此选项,结果将针对原始 x 正确广播。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
a = np.arange(9) - 4
b = a.reshape((3,3))

a
Out[7]: array([-4, -3, -2, -1, 0, 1, 2, 3, 4])
b
Out[8]:
array([[-4, -3, -2],
[-1, 0, 1],
[ 2, 3, 4]])

LA.norm(b,axis=1)
Out[9]: array([5.38516481, 1.41421356, 5.38516481])
LA.norm(b,axis=1,keepdims=True)
Out[10]:
array([[5.38516481],
[1.41421356],
[5.38516481]])

从以上结果看出:如果keepdims等于True,那么输出的矩阵将会是3乘以1的矩阵,输入矩阵是3乘以3。如果用Input/ norm(input)是不会报错的。