Numba
JIT compiler for Python
- 2 min read
- 3 chapters
Related on Lably
Through Open-source software, Python (programming language) and NumPy
Numba was started by Travis Oliphant in 2012 and has since been under active development with frequent releases. The project is driven by developers at Anaconda, Inc., with support by DARPA, the Gordon and Betty Moore Foundation, Intel, Nvidia and AMD, and a community of contributors on GitHub.
Example
Numba can be used by simply applying the numba.jit decorator to a Python function that does numerical computations:
<span id="mwIw"></span><span class="kn" id="mwJA">import</span><span class="w" id="mwJQ"> </span><span class="nn" id="mwJg">numba</span> <span class="kn" id="mwJw">import</span><span class="w" id="mwKA"> </span><span class="nn" id="mwKQ">random</span> <span class="nd" id="mwKg">@numba</span><span class="o" id="mwKw">.</span><span class="n" id="mwLA">jit</span> <span class="k" id="mwLQ">def</span><span class="w" id="mwLg"> </span><span class="nf" id="mwLw">monte_carlo_pi</span><span class="p" id="mwMA">(</span><span class="n" id="mwMQ">n_samples</span><span class="p" id="mwMg">:</span> <span class="nb" id="mwMw">int</span><span class="p" id="mwNA">)</span> <span class="o" id="mwNQ">-></span> <span class="nb" id="mwNg">float</span><span class="p" id="mwNw">:</span> <span class="w" id="mwOA"> </span><span class="sd" id="mwOQ">"""Monte Carlo"""</span> <span class="n" id="mwOg">acc</span> <span class="o" id="mwOw">=</span> <span class="mi" id="mwPA">0</span> <span class="k" id="mwPQ">for</span> <span class="n" id="mwPg">i</span> <span class="ow" id="mwPw">in</span> <span class="nb" id="mwQA">range</span><span class="p" id="mwQQ">(</span><span class="n" id="mwQg">n_samples</span><span class="p" id="mwQw">):</span> <span class="n" id="mwRA">x</span> <span class="o" id="mwRQ">=</span> <span class="n" id="mwRg">random</span><span class="o" id="mwRw">.</span><span class="n" id="mwSA">random</span><span class="p" id="mwSQ">()</span> <span class="n" id="mwSg">y</span> <span class="o" id="mwSw">=</span> <span class="n" id="mwTA">random</span><span class="o" id="mwTQ">.</span><span class="n" id="mwTg">random</span><span class="p" id="mwTw">()</span> <span class="k" id="mwUA">if</span> <span class="p" id="mwUQ">(</span><span class="n" id="mwUg">x</span><span class="o" id="mwUw">**</span><span class="mi" id="mwVA">2</span> <span class="o" id="mwVQ">+</span> <span class="n" id="mwVg">y</span><span class="o" id="mwVw">**</span><span class="mi" id="mwWA">2</span><span class="p" id="mwWQ">)</span> <span class="o" id="mwWg"><</span> <span class="mf" id="mwWw">1.0</span><span class="p" id="mwXA">:</span> <span class="n" id="mwXQ">acc</span> <span class="o" id="mwXg">+=</span> <span class="mi" id="mwXw">1</span> <span class="k" id="mwYA">return</span> <span class="mf" id="mwYQ">4.0</span> <span class="o" id="mwYg">*</span> <span class="n" id="mwYw">acc</span> <span class="o" id="mwZA">/</span> <span class="n" id="mwZQ">n_samples</span>
The just-in-time compilation happens transparently when the function is called:
<span id="mwag"></span><span class="gp" id="mwaw">>>> </span><span class="n" id="mwbA">monte_carlo_pi</span><span class="p" id="mwbQ">(</span><span class="mi" id="mwbg">1000000</span><span class="p" id="mwbw">)</span> <span class="go" id="mwcA">3.14</span>
Sign in to keep reading
2 more chapters are free with a Lably account.
GPU support
Numba can compile Python functions to GPU code. Initially two backends are available:
- NVIDIA CUDA, see numba.readthedocs.io/en/stable/cuda/index.html
- AMD ROCm HSA, see numba.pydata.org/numba-doc/dev/roc
Since release 0.56.4, AMD ROCm HSA has been officially moved to unmaintained status and a separate repository stub has been created for it.
Alternative approaches
Numba is one approach to make Python fast, by compiling specific functions that contain Python and NumPy code. Many alternative approaches for fast numeric computing with Python exist, such as Cython, Pythran, and PyPy.

