Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

timeit module in python does not recognize numpy module

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?

like image 675
user3211991 Avatar asked Jan 19 '14 11:01

user3211991


Video Answer


2 Answers

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.

like image 183
abarnert Avatar answered Oct 23 '22 16:10

abarnert


Use setup parameter:

u = timeit.Timer("np.arange(1000)", setup='import numpy as np')
like image 43
ndpu Avatar answered Oct 23 '22 15:10

ndpu