maxframe.tensor.arctan2#

maxframe.tensor.arctan2(x1, x2, out=None, where=None, **kwargs)[源代码]#

逐元素计算 x1/x2 的反正切值,并正确选择象限。

选择象限(即分支),使得 arctan2(x1, x2) 是以弧度为单位的有符号角度,该角度介于从原点出发经过点 (1,0) 的射线与从原点出发经过点 (x2, x1) 的射线之间。(注意角色互换:第一个函数参数是 "y 坐标",第二个是 "x 坐标"。)根据 IEEE 规范,此函数在 x2 = +/-0 以及 x1 和/或 x2 = +/-inf 时有定义(具体值见注释)。

此函数不适用于复数值参数;对于复数值的所谓幅角,请使用 angle

参数:
  • x1 (array_like, real-valued) -- y 坐标。

  • x2 (array_like, real-valued) -- x 坐标。x2 必须可以广播以匹配 x1 的形状,反之亦然。

  • out (Tensor, None, or tuple of Tensor and None, optional) -- 用于存储结果的位置。如果提供,它必须具有输入广播后的形状。如果未提供或为 None,则返回一个新分配的 tensor。元组(只能作为关键字参数)的长度必须等于输出的数量。

  • where (array_like, optional) -- 值为 True 表示在该位置计算 ufunc,值为 False 表示保留输出中的原值。

  • **kwargs

返回:

angle -- 以弧度为单位的角度数组,范围为 [-pi, pi]

返回类型:

Tensor

参见

arctan, tan, angle

备注

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

x1

x2

arctan2(x1,x2)

±0

+0

±0

±0

-0

±π

> 0

±∞

+0 / +π

< 0

±∞

-0 / -π

±∞

+∞

±(π/4)

±∞

-∞

±(3π/4)

注意 +0 和 -0 是不同的浮点数,+inf 和 -inf 也是如此。

引用

示例

考虑四个位于不同象限的点:>>> import maxframe.tensor as mt

>>> x = mt.array([-1, +1, +1, -1])
>>> y = mt.array([-1, -1, +1, +1])
>>> (mt.arctan2(y, x) * 180 / mt.pi).execute()
array([-135.,  -45.,   45.,  135.])

请注意参数的顺序。arctan2x2 = 0 时以及其他一些特殊点处也有定义,其值在 [-pi, pi] 范围内:

>>> mt.arctan2([1., -1.], [0., 0.]).execute()
array([ 1.57079633, -1.57079633])
>>> mt.arctan2([0., 0., mt.inf], [+0., -0., mt.inf]).execute()
array([ 0.        ,  3.14159265,  0.78539816])