megengine.functional.pow#

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

逐元素幂。

一种特定实现的近似取幂运算,将张量 \(x\) 中的每一个元素 \(x_i\) (底数) 跟张量 \(y\) 中每一个元素 \(y_i\) (指数)做幂运算。

参数:
  • x (Tensor) – 第一个输入 tensor 里的元素作为幂运算的底数。要求是数字数据类型。

  • y (Tensor) – 第二个输入 tensor 里的元素作为幂运算的指数。维度必须兼容 x (参见 广播机制与规则 )。要求是数字数据类型。

返回类型:

Tensor

返回:

返回一个逐元素运算之后的 Tensor,其数值类型由 类型提升规则 规则决定。

备注

可以使用 ** 运算符作为 pow 的简写来进行张量计算。

特殊的案例

对于浮点数的操作,

  • 如果 \(x_i\) 不为 1\(y_i\)NaN, 则幂运算的结果为 NaN.

  • 如果 \(y_i\) 是``+0``,结果是 1,即使 \(x_i\)NaN

  • 如果 \(y_i\)-0,结果是 1,即使 \(x_i\)NaN

  • 如果 \(x_i\)NaN,并且 \(y_i\) 不等于 0,结果是 NaN

  • 如果 \(abs{x_i}\) 大于 1,并且 \(y_i\)+无穷大,结果是 +无穷大

  • 如果 \(abs{x_i}\) 大于 1,并且 \(y_i\)-无穷大,结果是 +0

  • 如果 \(abs{x_i}\)1\(y_i\)+无穷大,结果是 1

  • 如果 \(abs{x_i}\)1\(y_i\)-无穷大,结果是 1

  • 如果 \(x_i\)1,并且 \(y_i\) 不是 NaN,结果是 1

  • 如果 \(abs{x_i}\) 小于``1``,并且 \(y_i\)+无穷大,结果是 +0

  • 如果 \(abs{x_i}\) 小于 1,并且 \(y_i\)-无穷大,结果是 +无穷大

  • 如果 \(x_i\)+无穷大,并且 \(y_i\) 大于 0,结果是 +无穷大

  • 如果:math:x_i`是``+infinity`,并且:math:y_i`小于``0`,结果是``+0``。

  • 如果:math:x_i`是`-无穷大``,\(y_i`大于``0`\),并且:math:y_i`是一个奇数整数,结果是`-无穷大``。

  • 如果 \(x_i\) 是``-无穷大``,\(y_i`大于``0`\),并且:math:y_i`不是一个奇数整数,结果是``+无穷大`

  • 如果:math:x_i`是`-无穷大``,\(y_i`小于``0`\),并且:math:y_i`是一个奇数整数,结果是`-0``。

  • 如果:math:x_i`是`-无穷大``,\(y_i`小于``0`\),并且:math:y_i`不是一个奇数整数,结果是``+0`

  • 如果:math:x_i`是``+0`,并且:math:y_i`大于``0`,结果是``+0``。

  • 如果:math:x_i`是``+0`,并且:math:y_i`小于``0`,结果是``+无穷大``。

  • 如果 \(x_i\) 是``-0``,\(y_i`大于``0`\),并且:math:y_i`是一个奇数整数,结果是`-0``。

  • 如果:math:x_i`是`-0``,\(y_i`大于``0`\),并且:math:y_i`不是一个奇数的整数,结果是``+0`

  • 如果:math:x_i`是`-0``,\(y_i`小于``0`\),并且:math:y_i`是一个奇数的整数值,结果是`-无穷大``。

  • 如果:math:x_i`是`-0``,\(y_i`小于`0\),并且:math:y_i`不是一个奇数整数,结果是``+无穷大’。

  • 如果:math:x_i`小于0,:math:`x_i`是一个有限数,:math:`y_i`是一个有限数,并且:math:`y_i`不是一个整数,结果是``NaN`

实际案例

>>> F.pow(2.0, 3.0)
Tensor(8.0, device=xpux:0)

逐元素幂:

>>> x = Tensor([1, 2, 3, 4, 5])
>>> y = Tensor([1, 2, 1, 2, 1])
>>> F.pow(x, y)
Tensor([ 1.  4.  3. 16.  5.], device=xpux:0)

广播:

>>> F.pow(x, 2)
Tensor([ 1.  4.  9. 16. 25.], device=xpux:0)