2016-10-25 3 views
-1

У меня есть список, который фиксирует возникновение событий:частоты между интервалами событий в списке

a = [0,0,1,1,1,0,0,1,1,0,0,0,0,1,1,1,1,1,0,0,0,1,1] 

1 показывает появление события в данном временном шаге, и 0 является временным шагом, где событие hasn наблюдалось.

Мне интересно оценить на python статистику интервалов между событиями. То есть, статистика в раз я не записанными не-события (0s): Например

- mean of interval of events: (2+4+3)/3 = 3 
- max duration of an interval of no-event: 4 

Любые предложения, как я должен это сделать?

Большое спасибо

+1

так, что вы пробовали? с какими проблемами вы сталкиваетесь? – lejlot

+0

, что я понятия не имею, как это сделать! – hpnk85

+0

Есть много возможностей комбинирования интервальных последовательностей, можете ли вы объяснить это? И есть ли у вас какие-либо идеи относительно решения вашей проблемы (или любого кода, который вы пробовали до сих пор)? – Kasramvd

ответ

3
interval_zeros = [len(list(group)) for z,group in itertools.groupby(data) if z== 0] 
print sum(interval_zeros)/float(len(interval_zeros)) 
+0

Было бы лучше, если бы вы просто дали ссылку для' itertools.groupby() 'и позволили пользователю реализовать алгоритм самостоятельно –

+0

да, ваше право .... –

+0

большое спасибо – hpnk85

1

Вот один из способов сделать то, что вы хотите. Есть, конечно, более эффективные способы сделать это, но это просто:

a = [0,0,1,1,1,0,0,1,1,0,0,0,0,1,1,1,1,1,0,0,0,1,1] 
a = map(str,a) # Convert numbers to strings 
a = ''.join(a) # Concatenate all of the strings 
a = a.split('1') # Use the handy split function to find the zeros 
a = filter(lambda x: len(x) > 0, a) # select the zeros only 
a = map(len,a) # convert zero sequences to lengths 
print a 

Вот результат

[2, 2, 4, 3] 
+0

Что-то вроде этого пришло в голову, но потом я вспомнил 'groupby' ... – brianpck