megengine.functional.atan2#

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

逐元素 \(\arctan(\frac{y}{x})\) 函数。

对输入张量 \(x\) 的每个元素 \(x_i\) 以及输入张量 \(y\) 的相应元素 \(y_i\) 计算正切函数的反函数的近似值。

参数:
  • y – 第一个输入张量,其元素为被除数。应具有数值数据类型。

  • x – 第二个输入张量,其元素为除数。必须与 x 相容(见 广播机制与规则 )。应具有数值数据类型。

返回:

一个包含 \(y/x\) 中每个元素的反正切的张量。

特殊的案例

atan2 与底层 C 语言库中的 atan2 函数相同。以下特殊值在 C 语言标准中定义:

对于浮点数的操作,

  • 如果 \(y\)+/-0` 并且 \(x\)+0 ,那么结果是 +/-0

  • 如果 \(y\)+/-0 并且 \(x\)-0 ,那么结果是 +/-π

  • 如果 \(y\) 大于 0 并且 \(x\)+/-infinity ,那么结果是 +0/+π

  • 如果 \(y\) 小于 0 并且 \(x\)+/-infinity ,那么结果是 -0/-π

  • 如果 \(y\)+/-infinity` 并且 :math:`x` ``+infinity ,那么结果是 +/-(π/4)

  • 如果 \(y\)+/-infinity` 并且 :math:`x` ``-infinity ,那么结果是 +/-(3π/4)

注意 +0-0 是不同的浮点数, +inf-inf 同理。

实际案例

>>> F.atan2(0, 1)  # equals to atan(0)
Tensor(0.0, device=xpux:0)

逐元素反正切函数:

>>> y = Tensor([0, 1, -1])
>>> x = Tensor([1, 1, 1])
>>> F.atan2(y, x)
Tensor([ 0.      0.7854 -0.7854], device=xpux:0)