I want to test the processing time between 2 identical lists, specifically for a normal list and a numpy list. My code is
import timeit
import numpy as np
t = timeit.Timer("range(1000)")
print t.timeit()
u = timeit.Timer("np.arange(1000)")
print u.timeit()
Calculation for t
is fine, but for u
NameError: global name 'np' is not defined is listed.
How should I code it to get the processing time?
The timeit.Timer
class can be used in two different ways.
It can either take source code to be compiled an executed—in which case, the code is executed in a fresh environment where only the setup
code has been run, or it can take a callable, in which case the callable is just called (in your current environment, like any other callable).
So, you have two options:
u = timeit.Timer("np.arange(1000)", setup='import numpy as np')
… or …
u = timeit.Timer(lambda: np.arange(1000))
In the first case, the fact that you happen to have done an import numpy as np
is irrelevant; it has no effect on the environment in which np.arange(1000)
is compiled and executed (and thus you must include it in the setup=...
bit).
In the second case, the fact that you've done an import numpy as np
obviously is relevant—it affects the environment in which your code, including the lambda: np.arange(1000)
, gets evaluated.
Use setup
parameter:
u = timeit.Timer("np.arange(1000)", setup='import numpy as np')
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With