megengine.functional.add

add(x, y)[源代码]

计算输入 \(x\) 与输入 \(y\) 的逐元素和。

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

  • y (Tensor) – 第二个输入 Tensor,其 shape 必须与 x 的 shape 满足 broadcast 规则,见 广播机制与规则。该 Tensor 应该有一个数值数据类型。

返回类型

Tensor

返回

返回一个逐元素求和之后的 Tensor,其类型由 类型提升规则 规则决定。

特殊的案例

对于浮点数的操作,

  • 如果输入 \(x\)\(y\)Nan,结果为 Nan

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

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

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

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

  • 如果 \(x\)+infinity\(y\) 是一个有限的数,则结果为 +infinity

  • 如果 \(x\)-infinity\(y\) 是一个有限的数,则结果为 -infinity

  • 如果 \(x\) 是一个有限的数,\(y\)+infinity,则结果为 +infinity

  • 如果 \(x\) 是一个有限的数,\(y\)-infinity,则结果为 -infinity

  • 如果 \(x\)-0\(y\)-0,则结果为 -0

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

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

  • 如果 \(x\)+0\(y\)+0,则结果为 +0

  • 如果 \(x\)-0+0\(y\) 是一个非零数,则结果为 y

  • 如果 \(x\) 是一个非零数,\(y\)+0-0,则结果为 x

  • 如果 \(x\) 是一个非零数,\(y\)\(-x\),则结果为 +0

  • 在其余情况下,当既不涉及“无穷大”、“+0”、“-0”或“NaN”,并且操作数具有相同的数学符号或具有不同的大小时, 必须根据 IEEE 754-2019 和支持的舍入模式计算总和,并舍入到最接近的可被表示的值。 如果数值范围太大而无法表示,则运算结果溢出,结果为 +infinity `` ``-infinity

注解

  • 浮点加法是一种可被交换的运算,但并不总是可被结合的。

  • + 运算符可以用作 Tensor 上 add 的简写。

实际案例

>>> F.add(1.0, 4.0)
Tensor(5.0, device=xpux:0)
>>> x = Tensor([[1, 2, 3], [4, 5, 6]])
>>> y = Tensor([[1, 1, 1], [2, 2, 2]])
>>> F.add(x, y)
Tensor([[2 3 4]
 [6 7 8]], dtype=int32, device=xpux:0)
>>> F.add(x, 1)
Tensor([[2 3 4]
 [5 6 7]], dtype=int32, device=xpux:0)