|
|
@@ -131,8 +131,56 @@ def sub(x, y): |
|
|
|
return _elwise(x, y, mode=Elemwise.Mode.SUB) |
|
|
|
|
|
|
|
|
|
|
|
def mul(x, y): |
|
|
|
r"""Element-wise `multiplication`.""" |
|
|
|
def mul(x: Tensor, y: Tensor) -> Tensor: |
|
|
|
r"""Calculates the product for each element :math:`x_i` of the input tensor `x` with the respective element :math:`y_i` of the input tensor `y`. |
|
|
|
|
|
|
|
Note: |
|
|
|
* If either :math:`x_i` or :math:`y_i` is `NaN`, the result is `NaN`. |
|
|
|
* If :math:`x_i` is either `+infinity` or `-infinity` and :math:`y_i` is either `+0` or `-0`, the result is `NaN`. |
|
|
|
* If :math:`x_i` is either `+0` or `-0` and :math:`y_i` is either `+infinity` or `-infinity`, the result is `NaN`. |
|
|
|
* If :math:`x_i` and :math:`y_i` have different mathematical signs, the result has a negative mathematical sign, unless the result is `NaN`. |
|
|
|
* If :math:`x_i` is either `+infinity` or `-infinity` and :math:`y_i` is either `+infinity` or `-infinity`, |
|
|
|
the result is a signed infinity with the mathematical sign determined by the rule already stated above. |
|
|
|
* If :math:`x_i` is either `+infinity` or `-infinity` and :math:`y_i` is a nonzero finite number, |
|
|
|
the result is a signed infinity with the mathematical sign determined by the rule already stated above. |
|
|
|
* If :math:`x_i` is a nonzero finite number and :math:`y_i` is either `+infinity` or `-infinity`, |
|
|
|
the result is a signed infinity with the mathematical sign determined by the rule already stated above. |
|
|
|
* In the remaining cases, where neither `infinity` nor `NaN` is involved, |
|
|
|
the product must be computed and rounded to the nearest representable value according to IEEE 754-2019 and a supported rounding mode. |
|
|
|
If the magnitude is too large to represent, the result is an `infinity` of appropriate mathematical sign. |
|
|
|
If the magnitude is too small to represent, the result is a zero of appropriate mathematical sign. |
|
|
|
* Floating-point multiplication is not always associative due to finite precision. |
|
|
|
|
|
|
|
Args: |
|
|
|
x: first input tensor. Should have a numeric data type. |
|
|
|
y: second input tensor. Must be compatible with `x` (see :ref:`broadcasting-rule` ). Should have a numeric data type. |
|
|
|
|
|
|
|
Returns: |
|
|
|
A tensor containing the element-wise products. The returned array must have a data type determined by :ref:`dtype-promotion`. |
|
|
|
|
|
|
|
Examples: |
|
|
|
|
|
|
|
>>> F.mul(2, 3) |
|
|
|
Tensor(6, dtype=int32, device=xpux:0) |
|
|
|
|
|
|
|
>>> F.mul(2.0, 3.0) |
|
|
|
Tensor(6.0, device=xpux:0) |
|
|
|
|
|
|
|
>>> x = F.arange(6.0).reshape(2, 3)) |
|
|
|
>>> y = F.arange(3.0) |
|
|
|
>>> F.mul(x, y) |
|
|
|
Tensor([[ 0. 1. 4.] |
|
|
|
[ 0. 4. 10.]], device=xpux:0) |
|
|
|
|
|
|
|
The `*` operator can be used as a shorthand for :func:`~.functional.mul` on tensors. |
|
|
|
|
|
|
|
>>> x = F.arange(6.0).reshape((2, 3)) |
|
|
|
>>> y = F.arange(3.0) |
|
|
|
>>> x * y |
|
|
|
Tensor([[ 0. 1. 4.] |
|
|
|
[ 0. 4. 10.]], device=xpux:0) |
|
|
|
|
|
|
|
""" |
|
|
|
return _elwise(x, y, mode=Elemwise.Mode.MUL) |
|
|
|
|
|
|
|
|
|
|
|