2013-05-24 20 views
10

Ho una matrice numpy come questa [1,1,1,-1,-1,1,-1,1,1,-1,-1,-1,1,-1] Mi piacerebbe trovare la lunghezza della serie consecutiva più lunga di 1s o -1s. Nell'esempio, dovrebbe essere 3trova la lunghezza della serie di numeri consecutivi più lunga

+0

Vuoi un 'soluzione numpy' o una soluzione pura-python va bene ? È banale usare 'itertools.groupby' ... – Bakuriu

+0

Quindi l'output in questo caso dovrebbe essere 2 (-1-1) giusto? ... ord c'è solo un", "mancante e in realtà vuoi 3 (1,1 1)? – pypat

+0

@Bakuriu tutte le soluzioni pure-python sono soluzioni numpy. L'unica differenza è che a volte le soluzioni specifiche di numpy sono molto più belle o molto più veloci. –

risposta

16

in puro Python

>>> from itertools import groupby 
>>> L = [1,1,1,-1,-1,1,-1,1,1,-1,-1,-1,1,-1] 
>>> max(sum(1 for i in g) for k,g in groupby(L)) 
3 
+2

Non può essere più semplice di così. +1 –

+0

Bel uso di itertools! – jszakmeister

+5

@jszakmeister, ogni volta che il problema include la parola "consecutivo", 'groupby()' dovrebbe essere la prima cosa che fai su –

5

Simile alla risposta da @AlexMartelli

>>> import numpy as np 
>>> nums = np.array([1,1,1,-1-1,1,-1,1,1,-1,-1,-1,1,-1]) 
>>> run_ends = np.where(np.diff(nums))[0] + 1 
>>> np.diff(np.hstack((0, run_ends, nums.size))).max() 
3 
Problemi correlati