znaleźć długość sekwencji identycznych wartości w tablicy numpy (kodowanie długości przebiegu)

W programie pylab (który prawdopodobnie może być również programem matlab) mam tablicę liczb liczb reprezentujących odległości:d[t] jestdystans o czasiet (a czas moich danych jestlen(d) jednostki czasu).

Wydarzenia, którymi się interesuję, są wtedy, gdy odległość jest poniżej pewnego progu i chcę obliczyć czas trwania tych zdarzeń. Łatwo jest uzyskać szereg booleanówb = d<threshold, a problem sprowadza się do obliczenia sekwencji długości słów True-only wb. Ale nie wiem, jak to zrobić efektywnie (np. Używając numpy prymitywów), i uciekłem się do chodzenia po tablicy i do ręcznego wykrywania zmian (tj. Inicjowania licznika, gdy wartość przechodzi z False do True, zwiększania licznika, dopóki wartość jest prawdziwa) i wypisz licznik do sekwencji, gdy wartość powróci do False). Ale to jest niezwykle powolne.

Jak skutecznie wykrywać takie sekwencje w macierzach numerycznych?

Poniżej znajduje się kod Pythona, który ilustruje mój problem: czwarta kropka pojawia się bardzo długo (jeśli nie, zwiększ rozmiar tablicy)

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 '.'

questionAnswers(5)

yourAnswerToTheQuestion