megengine.functional.mul

mul(x, y)[源代码]

逐元素相乘。

计算输入张量 x 的每个元素 \(x_i\) 与输入张量 \(y\) 的相应元素 \(y_i\) 的乘积。

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

  • y (Tensor) – 第二个输入 tensor。必须与 \(x\) 兼容 (请查看 广播机制与规则 )。应具有数值数据类型。

返回类型

Tensor

返回

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

特别案例

对于浮点操作数,

  • 如果 \(x_i\)\(y_i\)NaN,则结果是 NaN

  • 如果 \(x_i\)+infinity-infinity 并且 \(y_i\)+0-0,则结果为 NaN

  • 如果 \(x_i\)+0-0 并且 \(y_i\)+infinity-infinity,则结果为 NaN

  • 如果 \(x_i\)\(y_i\) 有不同的数学符号,则结果有一个负的数学符号,除非结果是 NaN

  • 如果 \(x_i\)+infinity-infinity 并且 \(y_i\)+infinity-infinity,则结果是有符号的无穷大,其数学符号由上述规则确定。

  • 如果 \(x_i\)+infinity-infinity 并且 \(y_i\) 是一个非零有限数,则结果是有符号无穷大,其数学符号由上述规则确定。

  • 如果 \(x_i\) 是一个非零有限数并且 \(y_i\)+infinity-infinity,则结果是一个有符号无穷大,其数学符号由上述规则确定。

  • 在其余情况下,既不涉及 infinity 也不涉及 NaN,必须根据 IEEE 754-2019 和支持的舍入模式计算乘积并舍入到最接近的可表示值。 如果量级太大而无法表示,则结果是适当数学符号的`infinity`。 如果量级太小而无法表示,则结果是适当数学符号的零。

注解

  • 由于精度有限,浮点乘法并不总是满足乘法交换律。

  • * 运算符可以用作张量上 mul 的简写。

实际案例

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

逐元素相乘:

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

Boradcasting:

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