On Fri, May 22, 2009 at 12:31 PM, Andrea Gavana <[email protected]> wrote: > Hi All, > > this should be a very easy question but I am trying to make a > script run as fast as possible, so please bear with me if the solution > is easy and I just overlooked it. > > I have a list of integers, like this one: > > indices = [1,2,3,4,5,6,7,8,9,255,256,257,258,10001,10002,10003,10004] > > >From this list, I would like to find out which values are consecutive > and store them in another list of tuples (begin_consecutive, > end_consecutive) or a simple list: as an example, the previous list > will become: > > new_list = [(1, 9), (255, 258), (10001, 10004)] > > I can do it with for loops, but I am trying to speed up a fotran-based > routine which I wrap with f2py (ideally I would like to do this step > in Fortran too, so if you have a suggestion on how to do it also in > Fortran it would be more than welcome). Do you have any suggestions? > > Thank you for your time. >
something along the line of: >>> indices = >>> np.array([1,2,3,4,5,6,7,8,9,255,256,257,258,10001,10002,10003,10004]) >>> idx = (np.diff(indices) != 1).nonzero()[0] >>> idx array([ 8, 12]) >>> idxf = np.hstack((-1,idx,len(indices)-1)) >>> vmin = indices[idxf[:-1]+1] >>> vmax = indices[idxf[1:]] >>> zip(vmin,vmax) [(1, 9), (255, 258), (10001, 10004)] Josef _______________________________________________ Numpy-discussion mailing list [email protected] http://mail.scipy.org/mailman/listinfo/numpy-discussion
