# oneflow.norm¶

`oneflow.``norm`(input, p='fro', dim=None, keepdim=False, dtype=None)

Returns the matrix norm or vector norm of a given tensor.

The documentation is referenced from: https://pytorch.org/docs/1.10/generated/torch.norm.html.

Warning

Use `oneflow.linalg.norm()`, instead, or `oneflow.linalg.vector_norm()` when computing vector norms and `oneflow.linalg.matrix_norm()` when computing matrix norms. Note, however, the signature for these functions is slightly different than the signature for oneflow.norm.

Parameters
• input (Tensor) – The input tensor. Its data type must be either a floating point or complex type. For complex inputs, the norm is calculated using the absolute value of each element. If the input is complex and neither `dtype` nor `out` is specified, the result’s data type will be the corresponding floating point type (e.g. float if `input` is complexfloat).

• p (int, float, inf, -inf, 'fro', 'nuc', optional) –

the order of norm. Default: `'fro'` The following norms can be calculated:

ord

matrix norm

vector norm

’fro’

Frobenius norm

‘nuc’

nuclear norm

Number

sum(abs(x)**p)**(1./p)

The vector norm can be calculated across any number of dimensions. The corresponding dimensions of `input` are flattened into one dimension, and the norm is calculated on the flattened dimension.

Frobenius norm produces the same result as `p=2` in all cases except when `dim` is a list of three or more dims, in which case Frobenius norm throws an error.

Nuclear norm can only be calculated across exactly two dimensions.

• dim (int, tuple of ints, list of ints, optional) – Specifies which dimension or dimensions of `input` to calculate the norm across. If `dim` is `None`, the norm will be calculated across all dimensions of `input`. If the norm type indicated by `p` does not support the specified number of dimensions, an error will occur.

• keepdim (bool, optional) – whether the output tensors have `dim` retained or not. Ignored if `dim` = `None` and `out` = `None`. Default: `False`

• dtype (`oneflow.dtype`, optional) – the desired data type of returned tensor. If specified, the input tensor is casted to `dtype` while performing the operation. Default: None.

Note

Even though `p='fro'` supports any number of dimensions, the true mathematical definition of Frobenius norm only applies to tensors with exactly two dimensions. `oneflow.linalg.norm()` with `ord='fro'` aligns with the mathematical definition, since it can only be applied across exactly two dimensions.

Example:

```>>> import oneflow as flow
>>> a = flow.arange(9, dtype= flow.float) - 4
>>> b = a.reshape((3, 3))
>>> flow.norm(a)
tensor(7.7460, dtype=oneflow.float32)
>>> flow.norm(b)
tensor(7.7460, dtype=oneflow.float32)
>>> flow.norm(a, float('inf'))
tensor(4., dtype=oneflow.float32)
>>> flow.norm(b, float('inf'))
tensor(9., dtype=oneflow.float32)
>>> c = flow.tensor([[ 1, 2, 3],[-1, 1, 4]] , dtype= flow.float)
>>> flow.norm(c, dim=0)
tensor([1.4142, 2.2361, 5.0000], dtype=oneflow.float32)
>>> flow.norm(c, dim=1)
tensor([3.7417, 4.2426], dtype=oneflow.float32)
>>> flow.norm(c, p=1, dim=1)
tensor([6., 6.], dtype=oneflow.float32)
>>> d = flow.arange(8, dtype= flow.float).reshape(2,2,2)
>>> flow.norm(d, dim=(1,2))
tensor([ 3.7417, 11.2250], dtype=oneflow.float32)
>>> flow.norm(d[0, :, :]), flow.norm(d[1, :, :])
(tensor(3.7417, dtype=oneflow.float32), tensor(11.2250, dtype=oneflow.float32))
```