与numpy.unwrap相反

2024-09-27 22:23:10 发布

您现在位置:Python中文网/ 问答频道 /正文

在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

但是有没有更简单/更快的方法呢?


Tags: 方法函数numpybypiunwrapgreaterwhile
3条回答

这个答案与世嘉赛的答案略有不同,世嘉赛的答案是:

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的映射,那么

乘以buy-1操作的输入和输出。就像这样:

phases =  (( -phases + np.pi) % (2.0 * np.pi ) - np.pi) * -1.0
phases = (phases + np.pi) % (2 * np.pi) - np.pi
import numpy as np
phases = np.arctan2(np.sin(phases), np.cos(phases))

这是因为sin(相位)/cos(相位)==tan(相位)。我们利用反切函数得到反相位(模2π)。从数学上讲,反正切函数是多值的,所以在编程语言中,它通常被定义为以固定的间隔返回相位。

双参数反正切函数,即np.arctan2(numerator, denominator),与正则反正切函数相同,只是它跟踪分子和分母的符号,因此能够返回相位模2π,而不是只能返回相位模π的正则np.arctan(numerator/denominator)函数。Numpy对arctan2函数的实现被定义为返回范围[-π,+π]内的相位,这是OP请求的范围。

附加说明:arctan2方法直接从复数表示法出发,在数学上完全等同于:

phases = np.angle(np.exp(1j*phases))

这可能更直观。实际上,numpy的angle函数在幕后使用arctan2来分离指数的虚和实成分,即正弦和余弦。

相关问题 更多 >

    热门问题