Résultats lors de l'accélération des calculs numériques avec Python et Numba

J'ai utilisé Numba dans mes recherches pour accélérer les programmes Python. Je suis tombé sur diverses erreurs lors de la mise en œuvre, je vais donc partager les résultats sous forme d'échantillon.

Dans mon cas, le calcul de la méthode d'optimisation du groupe de particules utilisant la méthode Lungekutter est devenu 33 fois plus rapide, passant d'environ 2000 secondes à environ 60 secondes.

※Mise en garde※

1. Environnement

$ sw_vers
ProductName:	Mac OS X
ProductVersion:	10.15.2
BuildVersion:	19C57

$ python -V
Python 3.8.5

$ pip freeze
numba==0.51.0
numpy==1.19.1

Numba peut être installé avec la commande suivante.

$ pip install numba

2. Exemple d'utilisation

2-1. Utilisez np.empty``` dans la fonction

Lors de l'utilisation de numba, l'utilisation de `` np.empty '' dans une fonction peut entraîner une erreur. Dans ce cas, la spécification du type comme suit a bien fonctionné.

main.py


import numpy as np
from numba import njit

@njit("f8[:,:]()")
def func():
    x = np.empty((1, 2), dtype=np.float64)
    return x

print(func())

2-2. Renvoie plusieurs valeurs de retour

Pour renvoyer plusieurs valeurs de retour, écrivez sous la forme `` Tuple ((i8, i8)) ''. Notez que les parenthèses sont doublées.

main.py


import numpy as np
from numba import njit

@njit("Tuple((i8, i8))(i8, i8)")
def func(x, y):
    return x, y

print(func(1, 2))

2-3. Gérer les listes multidimensionnelles

Lorsque vous traitez avec des listes multidimensionnelles dans Numba, écrivez comme `f8 [:,:]` `. Puisqu'il est bidimensionnel, cela ne signifie pas qu'il y a deux deux points, mais il semble que deux points soient suffisants pour n'importe quel nombre de dimensions.

main.py


import numpy as np
from numba import njit

@njit("f8[:,:](f8[:,:])")
def func(x):
    return x ** 2

x = np.random.rand(5, 5)
print(func(x))

3. Fin

Il existe différentes façons d'accélérer Python, telles que Cython et Julia, mais je pense que la méthode Numba, qui écrit uniquement des décorateurs, est la plus simple.

Bien qu'il existe des restrictions telles que l'impossibilité d'utiliser des classes et des générateurs, j'ai pensé qu'il serait relativement facile à mettre en œuvre si la méthode devait accélérer le goulot d'étranglement localement.

4. Références

Recommended Posts

Résultats lors de l'accélération des calculs numériques avec Python et Numba
J'ai installé et utilisé Numba avec Python3.5
Environnement et utilisation recommandés lors du développement avec Python
Calcul numérique avec Python
Démarrer le calcul numérique avec Python (avec Homebrew et pip)
Programmation avec Python et Tkinter
Chiffrement et déchiffrement avec Python
Python et matériel - Utilisation de RS232C avec Python -
Erreur lors de la lecture avec python
python avec pyenv et venv
Fonctionne avec Python et R
Communiquez avec FX-5204PS avec Python et PyUSB
Briller la vie avec Python et OpenCV
Robot fonctionnant avec Arduino et python
Installez Python 2.7.9 et Python 3.4.x avec pip.
Réseau neuronal avec OpenCV 3 et Python 3
Modulation et démodulation AM avec python
Scraping avec Node, Ruby et Python
Grattage avec Python, Selenium et Chromedriver
Grattage avec Python et belle soupe
Erreur et solution lors de l'installation de python3 avec homebrew sur mac (catalina 10.15)
Encodage et décodage JSON avec python
Introduction à Hadoop et MapReduce avec Python
[GUI en Python] PyQt5-Glisser-déposer-
[Python] Mémo d'erreur et de solution lors de l'utilisation de venv avec pyenv + anaconda
Lire et écrire NetCDF avec Python
Comment gérer les erreurs lors de l'installation de Python et de pip avec choco
Accélérez grossièrement Python avec numba
J'ai joué avec PyQt5 et Python3
Lire et écrire du CSV avec Python
Intégration multiple avec Python et Sympy
Quand matplotlib ne fonctionne pas avec python2.7
Coexistence de Python2 et 3 avec CircleCI (1.0)
Lors de l'utilisation de MeCab avec python dans virtualenv
Précautions lors de l'utilisation de six avec Python 2.5
Jeu Sugoroku et jeu d'addition avec Python
Modulation et démodulation FM avec Python
[Python] Formater quand to_csv avec des pandas
J'ai remplacé le calcul numérique de Python par Rust et comparé la vitesse
Fonction d'interpolation bilinéaire lors de la conversion de coordonnées non linéaires avec Python et Numpy
Paramètres lors de l'utilisation de requêtes Python 3 et de Beautiful Soup avec crostini sur Chromebook
Quand je screenfetch avec xonsh, python x.x sort et c'est triste
Communiquez entre Elixir et Python avec gRPC
Calculer et afficher le poids standard avec python
Surveiller les pannes de Mojo avec Python et Skype
Extrait de code pour une recherche de bits complète avec python
[Python] Utiliser et et ou lors de la création de variables
Modulation et démodulation FM avec Python Partie 3
[Automation] Manipulez la souris et le clavier avec Python
Authentification sans mot de passe avec RDS et IAM (Python)
Utilisation de Python et MeCab avec Azure Databricks
Remarques lors de la création d'un environnement avec python
POSTER diversement avec Python et recevoir avec Flask
Capturer des images avec Pupil, python et OpenCV
Points à noter lors de la résolution de problèmes DP avec Python
Fractal pour faire et jouer avec Python
Un mémo contenant Python2.7 et Python3 dans CentOS
Utilisez PIL ou Pillow avec Cygwin Python
Créer et décrypter du code César avec python