Numba es un compilador JIT de código abierto que traduce un subconjunto de Python y NumPy a código de máquina rápido utilizando LLVM , a través del paquete llvmlite Python. Ofrece una variedad de opciones para paralelizar código Python para CPU y GPU, a menudo con solo cambios menores de código.
Numba fue iniciado por Travis Oliphant en 2012 y desde entonces ha estado en desarrollo activo en su repositorio en GitHub con lanzamientos frecuentes. El proyecto está impulsado por desarrolladores de Anaconda, Inc., con el apoyo de DARPA , la Fundación Gordon y Betty Moore , Intel , Nvidia y AMD , y una comunidad de contribuyentes en GitHub .
Numba se puede utilizar simplemente aplicando el numba.jit
decorador a una función de Python que realiza cálculos numéricos:
importar numba importar aleatorio@numba . jit def monte_carlo_pi ( n_samples : int ) -> float : """Monte Carlo""" acc = 0 para i en el rango ( n_samples ): x = aleatorio . aleatorio () y = aleatorio . aleatorio () si ( x ** 2 + y ** 2 ) < 1.0 : acc += 1 devuelve 4.0 * acc / n_samples
La compilación justo a tiempo ocurre de forma transparente cuando se llama a la función:
>>> monte_carlo_pi ( 1000000 ) 3.14
El sitio web de Numba contiene muchos más ejemplos, así como información sobre cómo obtener un buen rendimiento de Numba.
Numba puede compilar funciones de Python en código GPU. Inicialmente hay dos backends disponibles:
Desde la versión 0.56.4, [2] AMD ROCm HSA se ha movido oficialmente al estado sin mantenimiento y se ha creado un código auxiliar de repositorio separado para ello.
Numba es un enfoque para hacer que Python sea rápido, compilando funciones específicas que contienen código Python y Numpy. Existen muchos enfoques alternativos para la computación numérica rápida con Python, como Cython , Pythran y PyPy .