在Python中,有一个拆开函数:
打开弧度相位p通过改变绝对跳跃大于停止到他们的2*pi补体沿给定的轴。
现在,我想做相反的功能。我如何包装一个阶段数组?例如,如何在-π和π之间转换所有的角度来约束它们?
最明显的方法是做这样的事情:
for i, a in enumerate(phases):
while a < pi:
a += 2 * pi
while a > pi:
a -= 2 * pi
phases[i] = a但有更简单/更快的方法吗?
发布于 2013-04-10 13:56:43
phases = (phases + np.pi) % (2 * np.pi) - np.pi发布于 2015-03-24 16:11:57
import numpy as np
phases = np.arctan2(np.sin(phases), np.cos(phases))这是因为sin(阶段)/cos(阶段) == tan(阶段)。利用逆切函数得到回相(模2π) .从数学上讲,逆正切函数是多值的,所以在编程语言中通常定义为在一个固定的区间内返回相位。
两个参数的arctangent函数,即np.arctan2(numerator, denominator),与常规的arctangent函数相同,只是它跟踪分子和分母的符号,因此能够返回相位模2π,而不是只能返回相位模π的常规np.arctan(numerator/denominator)函数。Numpy对arctan2函数的实现被定义为返回范围-π,+π中的阶段,这是OP请求的范围。
附加说明:此arctan2方法直接来自复杂表示,在数学上完全等同于:
phases = np.angle(np.exp(1j*phases))这可能更直观。事实上,numpy的angle函数使用arctan2在幕后分离指数的虚分量和实分量,即正弦和余弦。
发布于 2015-08-28 08:03:00
这个答案与sega_sai的答案略有不同,即:
phases = ( phases + np.pi) % (2 * np.pi ) - np.pi这个阶段映射到[ -pi,pi) ->,这意味着pi被映射到-pi
如下所示:
In [27]: phases = np.pi
In [28]: phases = ( phases + np.pi) % (2 * np.pi ) - np.pi
In [29]: print phases
-3.14159265359这是完全合法的,但是如果您想要映射(-pi,pi),那么
乘以输入和输出的操作购买-1。就像这样:
phases = (( -phases + np.pi) % (2.0 * np.pi ) - np.pi) * -1.0https://stackoverflow.com/questions/15927755
复制相似问题