Timing Python Code and Speeding things up with Numba

For many small coding tasks, we simply use the computer to analyze a small amount of data, or simulate a simple system and speed is not really an issue. However, there are certainly many circumstances where speed is important. This post will show

1. how to use python’s *timeit* module to time code snippets and functions
2. how to use numba to speed up code (significantly—often by more than 10x)

Using timeit to test small code snippets
Python has a nice module that can be used to time code (both from a bash terminal and from within a Jupyter Notebook or ipython console.) You can read about the timeit class at the Python 3.6 Documentation page for the timeit module; here I will confine myself to the timeit.timeit() function. The Python 3.6 Documentation defines this function as

timeit.timeit(stmt='pass', setup='pass', timer=, number=1000000, globals=None)

Create a Timer instance with the given statement, setup code and timer function and run its timeit() method with number executions. The optional globals argument specifies a namespace in which to execute the code.

The timeit.timeit() function returns a the time needed in units of seconds. Be careful when executing this function as it defaults to a million executions, and this could be prohibitively long for a complex function.
Let’s start with a simple example and get progressively fancier.

Click on this link: NumbaExample for a static html version of the Jupyter Notebook, and my GitHub site for a link to the actual notebook.


About PaulNakroshis

Professor of Physics at the University of Southern Maine.
This entry was posted in Jupyter Notebook, Numba, Timing Code. Bookmark the permalink.

2 Responses to Timing Python Code and Speeding things up with Numba

  1. Tom Wood says:

    Hi Paul,
    http://numba.pydata.org/numba-doc/0.31.0/user/jit.html says that there is a compilation time associated with numba, which explains the long code execution for the first run. This can be mitigated by using the cache=True option (or the ahead of time compilation options detailed in http://numba.pydata.org/numba-doc/0.31.0/user/pycc.html).
    Hope that helps.

Leave a Reply

Your email address will not be published. Required fields are marked *