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