Lably
Skip to content

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.

More in Computing and communication