numpy.linalg.norm

linalg.norm(x, ord=None, axis=None, keepdims=False)[源代码]

矩阵或向量范数。

此函数可以返回八个不同的矩阵范数中的一个,或者返回无穷多个向量范数中的一个(如下所述),具体取决于 ord 参数。

参数
xarray_like

输入数组。如果 axis 没有, x 必须是一维或二维,除非 ord 没有。如果两者都有 axisord 是无,2-标准的 x.ravel 将被退回。

ord非零int,inf,-inf,'fro,'nuc',可选

规范顺序(见下表 Notes )inf表示numpy's inf 对象。默认值为“无”。

axis{None,int,int的2元组},可选。

如果 axis 是一个整数,它指定 x 计算向量范数。如果 axis 是一个2元组,它指定包含二维矩阵的轴,并计算这些矩阵的矩阵范数。如果 axis 为无,则为向量范数(当 x 是一维)或矩阵范数(当 x 返回。默认值为“无”。

1.8.0 新版功能.

keepdims可选的布尔

如果设置为“真”,则忽略的轴将作为尺寸为1的尺寸保留在结果中。使用此选项,结果将正确广播到原始 x .

1.10.0 新版功能.

返回
n浮动还是日积月累

矩阵或向量的范数。

参见

scipy.linalg.norm

在SciPy中有类似的功能。

笔记

对于价值 ord < 1 严格来说,结果并不是一个数学的“范数”,但它对于各种数值目的仍然有用。

可计算出以下规范:

奥德

矩阵范数

向量范数

没有

弗罗宾纽斯范数

2-范数

“弗罗”

弗罗宾纽斯范数

——

“NUC”

核规范

——

因弗

最大值(总和(abs(x),轴=1)

最大值(ABS(x))

-INF

最小值(总和(abs(x),轴=1)

最小(ABS(x))

0

——

总和(X)!= 0)

1

最大值(总和(abs(x),轴=0)

如下

-1

最小值(总和(abs(x),轴=0))

如下

2

2-norm(最大单曲价值)

如下

-2

最小奇异值

如下

其他

——

和(ABS(x)) ord) (1。/ORD)

弗罗贝尼乌斯规范由 [1]:

||A||_F = [\sum_{i,j} abs(a_{i,j})^2]^{1/2}

核规范是奇异值的总和。

Frobenius和nuclear范数阶都只对矩阵定义,当 x.ndim != 2 .

工具书类

1

G.H.Golub和C.F.Van Loan, 矩阵计算 ,巴尔的摩,医学博士,约翰霍普金斯大学出版社,1985年,第15页

实例

>>> from numpy import linalg as LA
>>> a = np.arange(9) - 4
>>> a
array([-4, -3, -2, ...,  2,  3,  4])
>>> b = a.reshape((3, 3))
>>> b
array([[-4, -3, -2],
       [-1,  0,  1],
       [ 2,  3,  4]])
>>> LA.norm(a)
7.745966692414834
>>> LA.norm(b)
7.745966692414834
>>> LA.norm(b, 'fro')
7.745966692414834
>>> LA.norm(a, np.inf)
4.0
>>> LA.norm(b, np.inf)
9.0
>>> LA.norm(a, -np.inf)
0.0
>>> LA.norm(b, -np.inf)
2.0
>>> LA.norm(a, 1)
20.0
>>> LA.norm(b, 1)
7.0
>>> LA.norm(a, -1)
-4.6566128774142013e-010
>>> LA.norm(b, -1)
6.0
>>> LA.norm(a, 2)
7.745966692414834
>>> LA.norm(b, 2)
7.3484692283495345
>>> LA.norm(a, -2)
0.0
>>> LA.norm(b, -2)
1.8570331885190563e-016 # may vary
>>> LA.norm(a, 3)
5.8480354764257312 # may vary
>>> LA.norm(a, -3)
0.0

使用 axis 计算向量规范的参数:

>>> c = np.array([[ 1, 2, 3],
...               [-1, 1, 4]])
>>> LA.norm(c, axis=0)
array([ 1.41421356,  2.23606798,  5.        ])
>>> LA.norm(c, axis=1)
array([ 3.74165739,  4.24264069])
>>> LA.norm(c, ord=1, axis=1)
array([ 6.,  6.])

使用 axis 计算矩阵规范的参数:

>>> m = np.arange(8).reshape(2,2,2)
>>> LA.norm(m, axis=(1,2))
array([  3.74165739,  11.22497216])
>>> LA.norm(m[0, :, :]), LA.norm(m[1, :, :])
(3.7416573867739413, 11.224972160321824)