mars.tensor.arctan2#

mars.tensor.arctan2(x1, x2, out=None, where=None, **kwargs)[来源]#

逐元素的反正切 x1/x2 正确选择象限。

象限(即,分支)被选择为 arctan2(x1, x2) 是 原点处的射线与通过点 (1,0) 的射线之间的有符号角度(以弧度表示),以及原点处的射线和 通过点 (x2, x1) 的射线之间的角度。(注意角色的调换: “y-坐标”是第一个函数参数,“x-坐标”是第二个。)根据IEEE公约, 此函数被定义为 x2 = +/-0,并且对于 x1x2 中的任一个或两个为 +/-inf(有关特定值,请参见注释)。

该函数未定义为复值参数;对于复数值的所谓角度,请使用 angle

Parameters
  • x1 (类似数组, 实值) – y坐标。

  • x2 (类数组, 实数值) – x坐标。x2 必须能够广播以匹配x1的形状,反之亦然。

  • out (Tensor, None, 或 tupleTensor 和 None, 可选) – 结果存储的位置。如果提供,它必须具有和输入相同的广播形状。如果未提供或None,将返回一个新分配的张量。元组(仅作为关键字参数可能)必须具有与输出数量相等的长度。

  • where (array_like, 可选) – 值为 True 表示在该位置计算 ufunc,值为 False 表示保持输出中的该值不变。

  • **kwargs

Returns

angle – 以弧度表示的角度数组,范围为 [-pi, pi]

Return type

张量

另请参阅

arctan, tan, angle

备注

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

x1

x2

arctan2(x1,x2)

± 0

+0

± 0

+/- 0

-0

+/- π

> 0

+/-无穷大

+0 / +π

< 0

+/-无穷大

-0 / -π

+/-无穷大

+无穷大

+/- (π/4)

+/-无穷大

-无穷大

+/- (3*pi/4)

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

参考文献

1

ISO/IEC标准9899:1999,“编程语言C。”

示例

考虑四个在不同象限的点:

>>> import mars.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])