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,并且对于 x1 和 x2 中的任一个或两个为 +/-inf(有关特定值,请参见注释)。该函数未定义为复值参数;对于复数值的所谓角度,请使用 angle。
- Parameters
x1 (类似数组, 实值) – y坐标。
x2 (类数组, 实数值) – x坐标。x2 必须能够广播以匹配x1的形状,反之亦然。
out (Tensor, None, 或 tuple 的 Tensor 和 None, 可选) – 结果存储的位置。如果提供,它必须具有和输入相同的广播形状。如果未提供或None,将返回一个新分配的张量。元组(仅作为关键字参数可能)必须具有与输出数量相等的长度。
where (array_like, 可选) – 值为 True 表示在该位置计算 ufunc,值为 False 表示保持输出中的该值不变。
**kwargs –
- Returns
angle – 以弧度表示的角度数组,范围为
[-pi, pi]。- Return type
张量
备注
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.])
注意参数的顺序。 arctan2 在 x2 = 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])