NumPy参考 >例行程序 >线性代数(numpy.linalg) > numpy.linalg.norm
numpy.linalg.
norm
(x,ord = None,axis = None,keepdims = False )[源代码] ¶矩阵或向量范数。
根据ord
参数的值,此函数能够返回八种不同的矩阵规范之一,或无穷多个矢量规范之一(如下所述)。
输入数组。如果axis为None,则x必须为1-D或2-D,除非ord
为None。如果axis和ord均为None,x.ravel
则将返回2-范数
。
规范的顺序(请参阅下表Notes
)。inf表示numpy的
inf对象。默认为无。
如果axis是整数,则它指定x的轴,沿着该轴计算矢量范数。如果axis是2元组,则它指定保存2D矩阵的轴,并计算这些矩阵的矩阵范数。如果axis为None,则返回向量范数(当x 为1-D时)或矩阵范数(当x为2-D时)。默认为无。
1.8.0版中的新功能。
如果将其设置为True,则归一化后的轴将保留为尺寸为1的尺寸。使用此选项,结果将针对原始x正确广播。
1.10.0版中的新功能。
矩阵或向量的范数。
笔记
对于的值,严格来说,结果不是数学上的“范数”,但对于各种数值目的,它仍然可能有用。ord <= 0
可以计算以下规范:
奥德 |
矩阵规范 |
向量规范 |
---|---|---|
没有 |
Frobenius范数 |
2范数 |
“来回” |
Frobenius范数 |
– |
'nuc' |
核规范 |
– |
信息 |
max(sum(abs(x),axis = 1)) |
最大(abs(x)) |
-inf |
min(sum(abs(x),axis = 1)) |
最小(绝对(x)) |
0 |
– |
sum(x!= 0) |
1个 |
max(sum(abs(x),axis = 0)) |
如下 |
-1 |
min(sum(abs(x),轴= 0)) |
如下 |
2 |
2范数(最大单值) |
如下 |
-2 |
最小奇异值 |
如下 |
其他 |
– |
sum(abs(x)** ord)**(1./ord) |
Frobenius范数由[1]给出:
核范数是奇异值的总和。
参考文献
GH Golub和CF Van Loan,《矩阵计算》,马里兰州巴尔的摩,约翰·霍普金斯大学出版社,1985年,第13页。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)