megengine.functional.norm

norm(inp, ord=None, axis=None, keepdims=False)[源代码]

计算张量在给定轴上的范数。

这个函数能够返回不同的矩阵范数,或者无限多的向量范数中的一个(如下所述),这取决于 ord 参数的值。

参数
  • inp (Tensor) – 输入张量。 应该有一个数字数据类型。

  • ord (Optional[float]) – 范数的阶数(见注释下的表格)。如果没有指定,默认为 2 阶范数。

  • axis (Optional[int]) – 用于计算向量范数的轴。如果 axis 是一个整数,它指定了计算输入张量范数的轴。

  • keepdims – 如果设置为 “True”,被计算范数的轴将作为尺寸为 1 的维度留在结果中。

返回

矩阵或向量的范数。

注解

当前支持计算一下范数:

  • inf: 无穷范数(绝对值的最大值)。

  • -inf: 负无穷范数(绝对值的最小值)。

  • 2:二阶范数(最大单值)。

Frobenius 范数由 sum(abs(x)**ord)**(1./ord) 给出。

\[\|A\|_F=\left[\sum_{i, j} a b s\left(a_{i, j}\right)^2\right]^{1 / 2}\]

实际案例

>>> import math
>>> x = Tensor([1, 2, 3])
>>> F.norm(x, ord=math.inf)
Tensor(3, dtype=int32, device=xpux:0)
>>> F.norm(x, ord=-math.inf)
Tensor(1, dtype=int32, device=xpux:0)
>>> x = Tensor([[1, 2, 3], [4, 5, 6]])
>>> F.norm(x, ord=2, axis=0)
Tensor([4.1231 5.3852 6.7082], device=xpux:0)
>>> F.norm(x, ord=2, axis=1)
Tensor([3.7417 8.775 ], device=xpux:0)