【发布时间】:2012-04-12 14:52:53
【问题描述】:
我有一系列展开阶段,其中包含一些展开错误,包括 +/- Pi 倍数的跳跃:
import numpy
a = numpy.array([0.5, 1.3, 2.4, 10.3, 10.8, 10.2, 7.6, 3.2, 2.9])
在此示例中,在 2.4 和 10.3 之间有 2 个周期的第一次跳跃,在 7.6 和 3.2 之间有 -1 个周期的跳跃。我想删除跳跃。问题是,当您移除一个跳跃时,您需要相应地增加或减少该系列的其余部分,而不仅仅是跳跃发生的值。
有没有更简洁的方法(没有/更少的循环,更快)这样做:
jumpsexist = 1
while jumpsexist:
# Look for absolute differences greater than Pi
jump = numpy.abs((numpy.roll(a,-1) -a)) > numpy.pi
if jump[:-1].any():
# Find the index of the first jump
jumpind = numpy.argmax(jump) + 1
# Calculate the number of cycles in that jump
cycles = ((a[jumpind] - a[jumpind- 1]) / numpy.pi).astype("Int8")
# Remove the cycles
a[jumpind:] -= cycles * numpy.pi
else:
break
【问题讨论】:
-
注意这个变量不是叫“jump sexist”,而是“jumps exist”。我拿“s words”换200。
-
与您选择不当的变量名称保持一致,您可能会发现 numpy 函数
cumsum在这里很有用。这是累积总和,而不是......没关系。 -
附带说明,存在噪声时的相位展开是一个开放的研究问题...您不会碰巧在处理 InSAR 数据,对吗?