найти длину последовательностей с одинаковыми значениями в массиве numpy (кодирование длин серий)

В программе Pylab (которая, возможно, также может быть программой Matlab) у меня есть массив цифр, представляющих расстояния:d[t] этоdistance вовремяt (и временной интервал моих данныхlen(d) единицы времени).

Интересующие меня события - это когда расстояние ниже определенного порога, и я хочу вычислить продолжительность этих событий. Легко получить массив логических значений сb = d<thresholdи проблема сводится к вычислению последовательности длин истинных слов вb, Но я не знаю, как это сделать эффективно (например, с помощью numpy примитивов), и я прибегнул к обходу массива и обнаружению изменений вручную (т. Е. Инициализировал счетчик, когда значение переходит из False в True, увеличивая счетчик, пока значение равно True и выведите счетчик в последовательность, когда значение вернется к False). Но это очень медленно.

How to efficienly detect that sort of sequences in numpy arrays ?

Ниже приведен код Python, иллюстрирующий мою проблему: четвертая точка занимает очень много времени (если нет, увеличьте размер массива)

from pylab import *

threshold = 7

print '.'
d = 10*rand(10000000)

print '.'

b = d<threshold

print '.'

durations=[]
for i in xrange(len(b)):
    if b[i] and (i==0 or not b[i-1]):
        counter=1
    if  i>0 and b[i-1] and b[i]:
        counter+=1
    if (b[i-1] and not b[i]) or i==len(b)-1:
        durations.append(counter)

print '.'

Ответы на вопрос(5)

Ваш ответ на вопрос