megengine.functional.mod

mod(x, y)[源代码]

逐元素 \(\operatorname{mod}(x, y)\) 函数

返回余数,即由输入张量 \(x\) 中的每个元素 \(x_i\) 关于输入张量 :math:`y`中的每个元素:math:`y_i`取模所得到余数。

注解

  • 类似于Python的%运算符,不建议将此函数用于浮点数,因为语义不符合IEEE 754。该函数可以接受浮点数主要是为了向后兼容。

  • mod 是 NumPy 中 remainder 的别名。

参见

div / floor_div

参数
  • x (Tensor) – 输入 tensor,被除数。类型为数值数据类型。

  • y (Tensor) – 输入 tensor,除数,必须兼容:math:x `(参见:ref:`broadcasting-rule)。类型为数值数据类型。

返回类型

Tensor

返回

包含逐元素结果的张量。 返回的张量必须具有由 类型提升规则 确定的数据类型。

特殊的案例

对于浮点数的操作,

  • 如果 \(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)