[Numpy-discussion] indexing with booleans without making a copy?

josef.pktd@gmai... josef.pktd@gmai...
Wed Sep 8 14:36:31 CDT 2010


2010/9/8 Ernest Adrogué <eadrogue@gmx.net>:
> Hello,
>
> I have a sorted, flat array:
>
> In [139]: a =np.array([0,1,2,2,2,3])
>
> Basically, I want views of the areas where there
> are repeated numbers (since the array is sorted, they
> will be contiguous).
>
> But, of course, to find the numbers that are repeated
> I have to use comparison operations that return
> boolean arrays, so I suppose the problem is converting
> the boolean array into a slice.
>
> This is what I have come up with:
>
> In [146]: np.flatnonzero(a==2)
> Out[146]: array([2, 3, 4])
>
> In [147]: b=np.flatnonzero(a==2)
>
> In [148]: b.min()
> Out[148]: 2
>
> In [149]: b.max()
> Out[149]: 4
>
> In [150]: a[b.min():b.max()+1]
> Out[150]: array([2, 2, 2])
>
> If you know a more straightforward way of doing this,
> I'll be glad to know...


np.nonzero(np.diff(a))

add boundaries index zero and end
make two arrays one with starting points, one with endpoints.

Josef


>
> Cheers :)
> Ernest
> _______________________________________________
> NumPy-Discussion mailing list
> NumPy-Discussion@scipy.org
> http://mail.scipy.org/mailman/listinfo/numpy-discussion
>


More information about the NumPy-Discussion mailing list