megengine.functional.mod¶
- mod(x, y)[源代码]¶
逐元素 \(\operatorname{mod}(x, y)\) 函数
返回余数,即由输入张量 \(x\) 中的每个元素 \(x_i\) 关于输入张量 :math:`y`中的每个元素:math:`y_i`取模所得到余数。
注解
类似于Python的%运算符,不建议将此函数用于浮点数,因为语义不符合IEEE 754。该函数可以接受浮点数主要是为了向后兼容。
mod
是 NumPy 中remainder
的别名。
- 参数
- 返回类型
- 返回
包含逐元素结果的张量。 返回的张量必须具有由 类型提升规则 确定的数据类型。
特殊的案例
对于浮点数的操作,
如果 \(x_i\) 或 \(y_i\) 是
NaN
,则结果是NaN
。如果 \(x_i\) 是
+infinity
或-infinity
,并且 \(y_i\) 是+infinity
或-infinity
,则结果是NaN
。如果 \(x_i\) 是
+0
或-0
,并且 \(y_i\) 是+0
或-0
,则结果是NaN
。如果 \(x_i\) 是
+0
,并且 \(y_i\) 大于0
,则结果是+0
。如果 \(x_i\) 是
-0
,并且 \(y_i\) 大于0
,则结果是+0
。如果 \(x_i\) 是
+0
,并且 \(y_i\) 小于0
,则结果是-0
。如果 \(x_i\) 是
-0
,并且 \(y_i\) 小于0
,则结果是-0
。如果 \(x_i\) 大于
0
,并且 \(y_i\) 是+0
,则结果是NaN
。如果 \(x_i\) 大于
0
,并且 \(y_i\) 是-0
,则结果是NaN
。如果 \(x_i\) 小于
0
,并且 \(y_i\) 是+0
,则结果是NaN
。如果 \(x_i\) 小于
0
,并且 \(y_i\) 是-0
,则结果是NaN
。如果 \(x_i\) 是
+infinity
,并且 \(y_i\) 是正数(即大于0
),则结果是NaN
。如果 \(x_i\) 是
+infinity
,并且 \(y_i\) 是负数(即小于0
),则结果是NaN
。如果 \(x_i\) 是
-infinity
,并且 \(y_i\) 是正数(即大于0
),则结果是NaN
。如果 \(x_i\) 是
-infinity
,并且 \(y_i\) 是负数(即小于0
),则结果是NaN
。如果 \(x_i\) 是正数(即大于
0
),并且 \(y_i\) 是+infinity
,则结果是 \(x_i\)。(注:与Python行为一致)如果 \(x_i\) 是正数(即大于
0
),并且 \(y_i\) 是-infinity
,则结果是 \(y_i\)。(注:与Python行为一致)如果 \(x_i\) 是负数(即小于
0
),并且 \(y_i\) 是+infinity
,则结果是 \(y_i\)。(注:与Python行为一致)如果 \(x_i\) 是负数(即小于
0
),并且 \(y_i\) 是-infinity
,则结果是 \(x_i\)。(注:与Python行为一致)对于其余情况,必须与Python中的
%
操作符的结果一致。
实际案例
>>> F.mod(8, 3) Tensor(2, dtype=int32, device=xpux:0)
逐元素取模:
>>> x = Tensor([1, 2, 3, 4, 5]) >>> y = Tensor([1, 2, 1, 2, 1]) >>> F.mod(x, y) Tensor([0 0 0 0 0], dtype=int32, device=xpux:0)
广播:
>>> x = Tensor([1, 2, 3, 4, 5]) >>> F.mod(x, 3) Tensor([1 2 0 1 2], dtype=int32, device=xpux:0)