2013-05-24 10 views
10

У меня есть массив numpy, подобный этому [1,1,1,-1,-1,1,-1,1,1,-1,-1,-1,1,-1] Я хотел бы найти длину самой длинной последовательной серии из 1 или -1. В примере, это должно быть 3найти длину самой длинной последовательной серии чисел

+0

вы хотите сделать 'numpy' решение или чисто-питон решение в порядке ? Это тривиально, используя 'itertools.groupby' ... – Bakuriu

+0

Итак, выход в этом случае должен быть 2 (-1-1) справа? ... ord есть только«, »отсутствует, и вы действительно хотите 3 (1,1 , 1)? – pypat

+0

@Bakuriu все решения с чистым питоном - это бесчисленные решения. Единственное завихрение заключается в том, что иногда решения, специфичные для numpy, намного приятнее или намного быстрее. –

ответ

16

В чистом 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

Не может быть проще, чем это. +1 –

+0

Хорошее использование itertools! – jszakmeister

+5

@jszakmeister, в любое время проблема включает в себя слово «последовательный», 'groupby()' должно быть первым, что вы о –

5

аналогично ответу на @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 
Смежные вопросы