# numpy中的norm()函数求范数实例

## numpy norm()函数求范数

```norm(x, ord = None, axis = None, keepdims = False)
```

ord表示求什么类型的范数

### 举例说明

```import numpy as np

x = [1,2,3,4]
x1 = np.linalg.norm(x=x, ord=1)
x2 = np.linalg.norm(x=x, ord=2)
x3 = np.linalg.norm(x=x, ord=np.inf)
print(x1)
print(x2)
print(x3)
```

axis=0表示对矩阵的每一列求范数，axis=1表示对矩阵的每一行求范数， keeptdims=True表示结果保留二维特性，keepdims=False表示结果不保留二维特性

```import numpy as np

x = np.array([[0, 1, 2],
[3, 4, 5]])
x1 = np.linalg.norm(x=x, ord=1, axis=0, keepdims=True)
x2 = np.linalg.norm(x=x, ord=1, axis=1, keepdims=True)
x3 = np.linalg.norm(x=x, ord=1, axis=0, keepdims=False)
x4 = np.linalg.norm(x=x, ord=1, axis=1, keepdims=False)

print(x1)
print(x2)
print(x3)
print(x4)
```

## numpy求解范数(numpy.linalg.norm)以及各阶范数详解

numpy.linalg.norm

### 语法

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

### Parameters

x: array_like

Input array. If `axis` is None, x must be 1-D or 2-D, unless `ord` is None. If both `axis` and `ord` are None, the 2-norm of `x.ravel` will be returned.

X是输入的array, array的情况必须是以下三种情况之一:

• `axis`未指定，`ord`指定。此时x必须是一维或二维数组
• `axis`指定，`x`任意
• `axis`未指定，`ord`未指定，此时`x`任意，返回值为x被展平后的一维向量`x.ravel`的二范数。

ord：{non-zero int, inf, -inf, ‘fro’, ‘nuc’}, optional

Order of the norm (see table under Notes). inf means numpy’s inf object. The default is None.

axis:{None, int, 2-tuple of ints},optional

If `axis` is an integer, it specifies the `axis` of x along which to compute the vector norms. If `axis` is a 2-tuple, it specifies the axes that hold 2-D matrices, and the matrix norms of these matrices are computed. If axis is None then either a vector norm (when x is 1-D) or a matrix norm (when x is 2-D) is returned. The default is None.

keepdims: bool, optional

If this is set to True, the axes which are normed over are left in the result as dimensions with size one. With this option the result will broadcast correctly against the original x.

### 各范数详析

NOTE: 对于`ord<1`的各个范数，结果在严格意义不等于数学意义上的范数。但在数值计算层面仍然有效。

Frobenius范数

`ord = 'fro'`

F范数只对矩阵存在。其值为对所有元素的绝对值的平方求和后开平方。

Nuclear范数(核范数)

• `ord = 'nuc'`
• 只对矩阵存在，矩阵的核范数等于其所有奇异值的和。

• 对于矩阵：`max(sum(abs(x), axis=1))` ,每一行最终得到一个数，返回最大的数。
• 对于向量：`max(abs(x)`

• 对于矩阵: `min(sum(abs(x),axis=1))`,每一行得到一个数，返回最小的数。
• 对于向量: `min(abs(x))`

0 范数

• 对于矩阵：不存在
• 对于向量：`sum(x!=0)` 所有非零元素的和

1 范数

• 对于矩阵：`max(sum(abs(x)),axis=0`，每一列得到一个数，返回最大值。
• 对于向量：`sum(abs(x)**ord)**(1./ord)`

-1 范数

• 对于矩阵：`min(sum(abs(x)),axis=0`，每一列得到一个数，返回最小值。
• 对于向量：`sum(abs(x)**ord)**(1./ord)`

2 范数

• 对于矩阵：最大的奇异值
• 对于向量：`sum(abs(x)**ord)**(1./ord)`

-2范数

• 对于矩阵：最小的奇异值
• 对于向量：`sum(abs(x)**ord)**(1./ord)`

• 对于矩阵： Undefined
• 对于向量：`sum(abs(x)**ord)**(1./ord)`