megengine.functional.floor_div#

floor_div(x, y)[源代码]#

Element-wise floor division.

将输入张量 \(x\) 的每个元素 \(x_i\) 除以输入张量 \(y_i\) 的相应元素 \(y\) 的结果四舍五入到最大 (即最接近到 +infinity) 不大于除法结果的整数值数。

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

  • y (Tensor) – 作为除数的输入张量。Layout 必须跟 \(x`\) 兼容(具体参见 广播机制与规则 )。应该有一个数值数据类型。

返回类型:

Tensor

返回:

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

特别案例

对于浮点操作数,

  • 如果 \(x\)\(y\)NaN,则结果是 NaN

  • 如果 \(x\)+infinity-infinity\(y\)+infinity-infinity,则结果为 NaN

  • 如果 \(x\)+0-0 并且 \(y\)+0-0,结果是 NaN

  • 如果 \(x\)+0 并且 \(y\) 大于 0,则结果为 +0

  • 如果 \(x\)-0 并且 \(y\) 大于 0,则结果为 -0

  • 如果 \(x\)+0 并且 \(y\) 小于 0,则结果为 -0

  • 如果 \(x\)-0 并且 \(y\) 小于 0,则结果为 +0

  • 如果 \(x\) 大于 0 并且 \(y\)+0,则结果为 +infinity

  • 如果 \(x\) 大于 0 并且 \(y\)-0,则结果为 -infinity

  • 如果 \(x\) 小于 0 并且 \(y\)+0,则结果为 -infinity

  • 如果 \(x\) 小于 0 并且 \(y\)-0,则结果为 +infinity

  • 如果 \(x\)+infinity 并且 \(y\) 是一个正有限数 (即大于 0),则结果是 +infinity

  • 如果 \(x\)+infinity 并且 \(y\) 是一个负有限数 (即小于 0),则结果是 -infinity

  • 如果 \(x\)-infinity 并且 \(y\) 是一个正有限数 (即大于 0),则结果是 -infinity

  • 如果 \(x\)-infinity 并且 \(y\) 是一个负有限数 (即小于 0),则结果是 +infinity

  • 如果 \(x\) 是一个正有限数 (即大于 0) 并且 \(y\)+infinity,则结果是 +0

  • 如果 \(x\) 是一个正有限数 (即大于 0) 并且 \(y\)-infinity,则结果是 -0

  • 如果 \(x\) 是一个负有限数 (即小于 0) 并且 \(y\)+infinity,则结果是 -0

  • 如果 \(x\) 是一个负有限数 (即小于 0) 并且 \(y\)-infinity,则结果是 +0

  • 如果 \(x\)\(y\) 具有相同的数学符号并且都是非零有限数,则结果具有正的数学符号。

  • 如果 \(x\)\(y\) 具有不同的数学符号并且都是非零有限数,则结果具有负数学符号。

  • 在其余情况下,既不涉及``-infinity``、+0-0,也不涉及 NaN,则必须计算商并将其四舍五入为最接近的可表示值,符合 IEEE 754-2019 和支持的舍入模式。 如果量级太大而无法表示,则运算溢出,结果是适当数学符号的无穷大。 如果量级太小而无法表示,则运算下溢,并且结果是适当数学符号的零。

备注

// 运算符可以用作张量上``floor_div`` 的简写。

参见

在 Python 中,// 是地板除法运算符,/ 是真正的除法运算符。 见 div

实际案例

>>> F.floor_div(5.0, 4.0)
Tensor(1.0, device=xpux:0)

Element-wise floor division:

>>> x = Tensor([[1, 2, 3], [4, 5, 6]])
>>> y = Tensor([[1, 1, 1], [2, 2, 2]])
>>> F.floor_div(x, y)
Tensor([[1 2 3]
 [2 2 3]], dtype=int32, device=xpux:0)

广播:

>>> x = Tensor([[1, 2, 3], [4, 5, 6]])
>>> F.floor_div(x, 2)
Tensor([[0 1 1]
 [2 2 3]], dtype=int32, device=xpux:0)