pythontimeit

Need help in understanding the loop speed with timeit function in python


I need help in understanding the %timeit function works in the two programs.

Program A

a = [1,3,2,4,1,4,2]
%timeit [val + 5 for val in a]
830 ns ± 45.9 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

Program B

import numpy as np
a = np.array([1,3,2,4,1,4,2])
%timeit [a+5]
1.07 µs ± 23.7 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

My confusion:

  1. µs is bigger than ns. How does the NumPy function execute slower than for loop here?
  2. 1.07 µs ± 23.7 ns per loop... why is the loop speed calculated in ns and not in µs?

Solution

  • Numpy adds an overhead, this will impact the speed on small datasets. Vectorization is mostly useful when using large datasets.

    You must try on larger numbers:

    N = 10_000_000
    
    
    a = list(range(N))
    %timeit [val + 5 for val in a]
    
    import numpy as np
    a = np.arange(N)
    %timeit a+5
    

    Output:

    1.51 s ± 318 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
    
    55.8 ms ± 3.63 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)