-
def duration_count(a):
idx = np.r_[[0],np.flatnonzero(a[1:] != a[:-1])+1,a.size]
duration = np.diff(idx)
count = {a[0]:(duration.size+1)//2, -a[0]:duration.size//2}
return duration, count
-
In [43]: a = np.array([1,1,1,1,1,-1,-1,-1,1,1])
In [44]: duration_count(a)
Out[44]: (array([5, 3, 2]), {-1: 1, 1: 2})
In [45]: a = np.array([-1,-1,1,1,1,1,1,-1,-1,-1,1,1,-1,-1,-1,-1])
In [46]: duration_count(a)
Out[46]: (array([2, 5, 3, 2, 4]), {-1: 3, 1: 2})