2013-05-24 12 views
10

Mam tablicę numpy taką jak ta [1,1,1,-1,-1,1,-1,1,1,-1,-1,-1,1,-1] Chciałbym znaleźć długość najdłuższej z następujących po sobie serii 1s lub -1s. Na przykład, powinno być 3znajdź długość najdłuższej z następujących po sobie serii liczb

+0

Czy chcesz 'rozwiązanie numpy' lub roztwór czystego-python jest w porządku ? To banalne użycie 'itertools.groupby' ... – Bakuriu

+0

Więc wynik w tym przypadku powinien wynosić 2 (-1-1) w prawo? ... ord jest tam tylko", "brakujące i faktycznie chcesz 3 (1,1 , 1)? – pypat

+0

@Bururiu wszystkie rozwiązania z czystym pythonem są małymi rozwiązaniami. Jedyna zmiana polega na tym, że czasami rozwiązania specyficzne dla numpy są znacznie ładniejsze lub znacznie szybsze. –

Odpowiedz

16

w czystym Pythonie

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

Nie można uzyskać prostsze niż to. +1 –

+0

Dobre wykorzystanie narzędzi itertools! – jszakmeister

+5

@jszakmeister, za każdym razem, gdy problem zawiera słowo "consecutive", 'groupby()' powinno być pierwszą rzeczą, którą masz na myśli. –

5

podobne do odpowiedzi przez @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 
Powiązane problemy