在Python numpy中,有一个unwrap函数:
Unwrap radian phase p by changing absolute jumps greater than discont to their 2*pi complement along the given axis.
现在,我想做相反的功能。我怎样才能把一系列的相位包裹起来?E、 g.如何将所有角度转换为限制在-π和π之间?
最明显的方法是这样做:
for i, a in enumerate(phases):
while a < pi:
a += 2 * pi
while a > pi:
a -= 2 * pi
phases[i] = a
但是有没有更简单/更快的方法呢?
这个答案与世嘉赛的答案略有不同,世嘉赛的答案是:
这将相位映射到[-pi,pi)->;这意味着pi映射到-pi
如图所示:
这是完全合法的,但是如果你想要一个-pi,pi的映射,那么
乘以buy-1操作的输入和输出。就像这样:
这是因为sin(相位)/cos(相位)==tan(相位)。我们利用反切函数得到反相位(模2π)。从数学上讲,反正切函数是多值的,所以在编程语言中,它通常被定义为以固定的间隔返回相位。
双参数反正切函数,即
np.arctan2(numerator, denominator)
,与正则反正切函数相同,只是它跟踪分子和分母的符号,因此能够返回相位模2π,而不是只能返回相位模π的正则np.arctan(numerator/denominator)
函数。Numpy对arctan2
函数的实现被定义为返回范围[-π,+π]内的相位,这是OP请求的范围。附加说明:arctan2方法直接从复数表示法出发,在数学上完全等同于:
这可能更直观。实际上,numpy的
angle
函数在幕后使用arctan2
来分离指数的虚和实成分,即正弦和余弦。相关问题 更多 >
编程相关推荐