Python & Numba

Numba

Numba est une bibliothèque Python qui permet d'optimiser le code Python en le compilant en code machine pour une exécution plus rapide. Elle est principalement utilisée pour accélérer les calculs numériques intensifs, comme ceux qui sont couramment utilisés dans les domaines de la science des données, de l'apprentissage automatique et de la modélisation scientifique.

Numba fonctionne en "juste-à-temps" (JIT), ce qui signifie qu'il compile le code Python en code machine au moment où il est exécuté, plutôt que de le compiler à l'avance. Cela permet d'obtenir des performances proches de celles du code compilé, tout en conservant la flexibilité et la lisibilité du code Python.

Installer Numba

Pour utiliser Numba, vous devez d'abord l'installer dans votre environnement Python en utilisant la commande "pip install numba". Vous pouvez ensuite utiliser l'annotation "@numba.jit" pour indiquer à Numba quelles fonctions du code doivent être compilées en code machine. Numba peut également être utilisé avec d'autres bibliothèques Python pour accélérer des opérations spécifiques, comme les calculs matriciels avec NumPy.

En général, Numba est une bibliothèque très utile pour accélérer le code Python qui effectue des calculs intensifs. Cependant, il est important de garder à l'esprit que la compilation en code machine peut rendre le code moins lisible et plus difficile à déboguer, et qu'elle n'est pas toujours la solution la plus adaptée à tous les cas d'utilisation.

Exemple d'utilisation

import numba
import numpy as np
import time

def sum_array_python(arr):
    result = 0
    for i in range(arr.size):
        result += arr[i]
    return result

@numba.jit
def sum_array(arr):
    result = 0
    for i in range(arr.size):
        result += arr[i]
    return result

data = np.random.random(1000000)

# Comportement standard
start = time.time()
sum_array_python(data) 
print(time.time() - start)

# 1ère compilation prend plus de temps
start = time.time() 
sum_array(data)
print(time.time() - start)

# 100x plus rapide que le python standard
start = time.time()
sum_array(data) 
print(time.time() - start)

Voici ce que ca donne sur ma machine:

0.09061622619628906
0.15590143203735352
0.0009911060333251953

Impressionnant la différence!

Dans cet exemple, la fonction "sum_array()" est annotée avec "@numba.jit" pour indiquer à Numba qu'elle doit être compilée en code machine. Lorsque la fonction est exécutée sans Numba, elle est relativement lente en raison de la boucle "for" qui parcourt tous les éléments du tableau. Lorsqu'elle est exécutée avec Numba, elle est beaucoup plus rapide car le code est compilé en code machine et exécuté de manière plus efficace.

Cet exemple montre comment Numba peut être utilisé pour accélérer des fonctions qui effectuent des opérations sur des tableaux de données de manière séquentielle. Numba peut également être utilisé pour accélérer des fonctions qui effectuent des opérations sur des tableaux de manière vectorisée (en utilisant l'annotation "@numba.vectorize") ou générique (en utilisant l'annotation "@numba.guvectorize").

Une liste de mots-clés couramment utilisés avec Numba :

Concurrents:



Apprendre programmation cours python 3
Django internet web - Documentation débutant et expert
Version anglaise