[Numpy-discussion] indices of values contained in a list

Ernest Adrogué eadrogue at gmx.net
Sun Dec 13 21:00:20 EST 2009


12/12/09 @ 08:16 (-0800), thus spake Keith Goodman:
> If a and b are as short as in your example, which I doubt, here's a faster way:
> 
> >> timeit np.nonzero(reduce(np.logical_or, [a == i for i in b]))
> 100000 loops, best of 3: 14 µs per loop
> >> timeit [i for i, z in enumerate(a) if z in b]
> 100000 loops, best of 3: 3.43 µs per loop
> 
> Looping over a instead of b is faster if len(a) is much less than len(b):
> 
> >> a = np.random.randint(0,100,10000)
> >> b = tuple(set(a[:50].tolist()))
> >> len(b)
>    41
> >> timeit np.nonzero(reduce(np.logical_or, [a == i for i in b]))
> 100 loops, best of 3: 2.65 ms per loop
> >> timeit [i for i, z in enumerate(a) if z in b]
> 10 loops, best of 3: 37.7 ms per loop

Nice. Well speed was not critical in this case, sometimes
is good to know alternative ways of doing things.
Thanks for your suggestions.

Ernest



More information about the NumPy-Discussion mailing list