np.linalg.norm()函数

在jupyter notebook 中同时输入多行

from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity = 'all'

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

矩阵或向量范数。此函数能够返回八个不同矩阵规范之一,或无数个向量规范(如下所述)之一,具体取决于在ord参数的值上。

参数

  • x : 输入的数组,必须为一维或者二维
  • ord : {non-zero int, inf, -inf, ‘fro’, ‘nuc’}, 可选
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)
  • axis : 可选. 如果axis是整数,则指定要沿其移动的x轴计算向量范数。 如果axis是2元组,则指定保持二维矩阵的轴,以及这些矩阵的矩阵范数计算。 如果axis为None,则为向量范数(当x是1-D)或返回矩阵范数(当x是2-D时)。
    axis=1表示按向量处理,求多个行向量的范数
    axis=0表示按向量处理,求多个列向量的范数
    axis=None表示矩阵范数。

  • keepdims : 布尔值,可选.是否保持矩阵的二维特性。True表示保持矩阵的二维特性,False相反

返回值

浮点数或ndarray,矩阵或向量的范数。

实例一

import numpy as np 
a = np.arange(9) - 4
b = a.reshape((3,3))
a             # array([-4, -3, -2, -1,  0,  1,  2,  3,  4])
b             # array([[-4, -3, -2],[-1,  0,  1],[ 2,  3,  4]])
a_1 = np.linalg.norm(a)  # 默认参数(矩阵整体元素平方和开根号,不保留矩阵二维特性)
a_1      # 7.745966692414834
b_1 = np.linalg.norm(b)
b_1      # 7.745966692414834
b_2 = np.linalg.norm(b,"fro")
b_2      # 7.745966692414834
a_2 = np.linalg.norm(a,np.inf)
a_2     # 4.0
a_3 = np.linalg.norm(a,-np.inf)
a_3      # 0.0
b_3 = np.linalg.norm(b,np.inf)  # 矩阵∞范数
b_3     # 9.0
b_4 = np.linalg.norm(b,-np.inf)
b_4     # 2.0
a1 = np.linalg.norm(a,1)   # 20.0
a1_ = np.linalg.norm(a,-1)   # -4.6566128774142013e-010
a2 = np.linalg.norm(a,2)    # 7.745966692414834
a2_ = np.linalg.norm(a,-2)   # nan
b1 = np.linalg.norm(b,1)    # 矩阵1范数 7.0
b1_ = np.linalg.norm(b,-1)    # 6.0
b2 = np.linalg.norm(b,2)      #  矩阵2范数 7.3484692283495345
b2_ = np.linalg.norm(b,-2)     # 1.8570331885190563e-016
  • 使用axis参数计算向量范数
c = np.array([[ 1, 2, 3],[-1, 1, 4]])
np.linalg.norm(c, axis=0)      # array([ 1.41421356,  2.23606798,  5.        ])
np.linalg.norm(c, axis=1)      # array([ 3.74165739,  4.24264069])
np.linalg.norm(c, ord=1, axis=1)     # array([ 6.,  6.])
  • 使用axis参数计算矩阵范数:
m = np.arange(8).reshape(2,2,2)
np.linalg.norm(m, axis=(1,2))     # array([  3.74165739,  11.22497216])
np.linalg.norm(m[0, :, :]), np.linalg.norm(m[1, :, :])
# (3.7416573867739413, 11.224972160321824)

你可能感兴趣的:(#,numpy)