Исправление ошибок развертки фаз в Numpy

У меня есть ряд развернутых фаз с некоторыми ошибками развертывания, которые состоят из скачка +/- кратное Пи:

import numpy
a = numpy.array([0.5, 1.3, 2.4, 10.3, 10.8, 10.2, 7.6, 3.2, 2.9])

В этом примере есть первый скачок на 2 цикла между 2,4 и 10,3 и скачок на -1 цикл между 7,6 и 3,2. Я хочу убрать прыжки. Загвоздка в том, что когда вы удаляете скачок, вам нужно соответственно увеличивать или уменьшать остальную часть ряда, а не только значение, в котором происходит скачок.

Есть ли более чистый способ (без/меньше циклов, быстрее) сделать это:

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
5
задан Benjamin 12 April 2012 в 15:13
поделиться