mindspore.ops.norm
- mindspore.ops.norm(A, ord=None, dim=None, keepdim=False, *, dtype=None)[源代码]
返回给定Tensor的矩阵范数或向量范数。
ord 为norm的计算模式。支持下列norm模式。
ord
矩阵范数
向量范数
None (默认值)
Frobenius norm
2-norm (参考最下方公式)
'fro'
Frobenius norm
不支持
'nuc'
nuclear norm
不支持
inf
\(max(sum(abs(x), dim=1))\)
\(max(abs(x))\)
-inf
\(min(sum(abs(x), dim=1))\)
\(min(abs(x))\)
0
不支持
\(sum(x != 0)\)
1
\(max(sum(abs(x), dim=0))\)
参考最下方公式
-1
\(min(sum(abs(x), dim=0))\)
参考最下方公式
2
最大奇异值
参考最下方公式
-2
最小奇异值
参考最下方公式
其余int或float值
不支持
\(sum(abs(x)^{ord})^{(1 / ord)}\)
- 参数:
A (Tensor) - shape为 \((*, n)\) 或者 \((*, m, n)\) 的Tensor,其中*是零个或多个batch维度。
ord (Union[int, float, inf, -inf, 'fro', 'nuc'], 可选) - norm的模式。行为参考上表。默认值:
None
。dim (Union[int, Tuple(int)], 可选) - 计算向量范数或矩阵范数的维度。默认值:
None
。当 dim 为int时,会按向量范数计算。
当 dim 为一个二元组时,会按矩阵范数计算。
当 dim 为None且 ord 为None,A 将会被展平为1D并计算向量的2-范数。
当 dim 为None且 ord 不为None,A 必须为1D或者2D。
keepdim (bool) - 输出Tensor是否保留原有的维度。默认值:
False
。
- 关键字参数:
dtype (
mindspore.dtype
, 可选) - 如果设置此参数,则会在执行之前将 A 转换为指定的类型,返回的Tensor类型也将为指定类型 dtype。默认值:None
。
- 返回:
Tensor,在指定维度 dim 上进行范数计算的结果,与输入 A 的数据类型相同。
- 异常:
ValueError - dim 超出范围。
TypeError - dim 既不是int也不是由int组成的tuple。
TypeError - A 是一个向量并且 ord 是str类型。
ValueError - A 是一个矩阵并且 ord 不是有效的取值。
ValueError - A 是一个矩阵并且 ord 为一个整型但是取值不为[1, -1, 2, -2]之一。
ValueError - dim 的两个元素在标准化过后取值相同。
ValueError - dim 的任意元素超出索引。
说明
当前暂不支持复数。
- 支持平台:
Ascend
GPU
CPU
样例:
>>> import mindspore as ms >>> from mindspore import ops >>> data_range = ops.arange(-13, 13, dtype=ms.float32) >>> # Exclude 0 from original data for 0 is invalid input when `ord` is negative. >>> x = data_range[data_range != 0] >>> y = x.reshape(5, 5) >>> print(ops.norm(x)) 38.327538 >>> print(ops.norm(x, float('inf'))) 13.0 >>> print(ops.norm(x, float('-inf'))) 1.0 >>> print(ops.norm(x, 0)) 25.0 >>> print(ops.norm(x, 1)) 169.0 >>> print(ops.norm(x, -1)) 0.15915091 >>> print(ops.norm(x, 2)) 38.327538 >>> print(ops.norm(x, -2)) 0.5647041 >>> print(ops.norm(x, 3)) 24.309084 >>> print(ops.norm(x, -3)) 0.74708974 >>> print(ops.norm(y)) 38.327538 >>> print(ops.norm(y, 'fro')) 38.327538 >>> print(ops.norm(y, 'nuc')) 45.56681 >>> print(ops.norm(y, float('inf'))) 55.0 >>> print(ops.norm(y, float('-inf'))) 9.0 >>> print(ops.norm(y, 1)) 35.0 >>> print(ops.norm(y, -1)) 33.0 >>> print(ops.norm(y, 2)) 37.57774 >>> print(ops.norm(y, -2)) 1.590545e-07 >>> m = ms.Tensor([[1., -1., 2.], [-2., 3., -4.]]) >>> print(ops.norm(m, dim=0)) [2.236068 3.1622777 4.472136 ] >>> print(ops.norm(m, dim=1)) [2.4494898 5.3851647] >>> print(ops.norm(m, ord=1, dim=1)) [4. 9.] >>> print(ops.norm(m, ord=-2, dim=0)) [0.8944272 0.94868326 1.7888544 ] >>> print(ops.norm(m, ord=2, dim=1)) [2.4494898 5.3851647] >>> n = ops.arange(27, dtype=ms.float32).reshape(3, 3, 3) >>> print(ops.norm(n, dim=(1, 2))) [14.282857 39.76179 66.45299 ] >>> print(ops.norm(n[0, :, :]), ops.norm(n[1, :, :]), ops.norm(n[2, :, :])) 14.282857 39.76179 66.45299