[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