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

Ernest Adrogué eadrogue@gmx....
Sun Dec 13 20:00:20 CST 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