Ergebnisse bei der Beschleunigung numerischer Berechnungen mit Python und Numba

Ich habe Numba in meiner Forschung verwendet, um Python-Programme zu beschleunigen. Ich bin bei der Implementierung auf verschiedene Fehler gestoßen, daher werde ich die Ergebnisse als Beispiel weitergeben.

In meinem Fall ist die Berechnung der Partikelgruppenoptimierungsmethode mit der Lungekutter-Methode 33-mal schneller geworden, von ungefähr 2000 Sekunden auf ungefähr 60 Sekunden.

※Hinweis※

1. Umwelt

$ 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 kann mit dem folgenden Befehl installiert werden.

$ pip install numba

2. Anwendungsbeispiel

2-1. Verwenden Sie `` `np.empty``` in der Funktion

Bei Verwendung von numba kann die Verwendung von `` `np.empty``` in einer Funktion zu einem Fehler führen. In diesem Fall funktionierte die Angabe des Typs wie folgt einwandfrei.

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. Gibt mehrere Rückgabewerte zurück

Um mehrere Rückgabewerte zurückzugeben, schreiben Sie als `Tuple ((i8, i8))`. Beachten Sie, dass die Klammern verdoppelt werden.

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. Umgang mit mehrdimensionalen Listen

Wenn Sie mit mehrdimensionalen Listen in Numba arbeiten, schreiben Sie als `f8 [:,:]`. Da es zweidimensional ist, bedeutet dies nicht, dass es zwei Doppelpunkte gibt, aber es scheint, dass zwei Doppelpunkte für eine beliebige Anzahl von Dimensionen ausreichen.

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. Beenden

Es gibt verschiedene Möglichkeiten, Python zu beschleunigen, wie Cython und Julia, aber ich denke, die Numba-Methode, die nur Dekorateure schreibt, ist die einfachste.

Obwohl es Einschränkungen gibt, wie beispielsweise die Nichtverwendung von Klassen und Generatoren, war es meiner Meinung nach relativ einfach zu implementieren, wenn die Methode den Engpass lokal beschleunigen würde.

4. Referenzen

Recommended Posts

Ergebnisse bei der Beschleunigung numerischer Berechnungen mit Python und Numba
Ich habe Numba mit Python3.5 installiert und verwendet
Empfohlene Umgebung und Verwendung bei der Entwicklung mit Python
Numerische Berechnung mit Python
Starten Sie die numerische Berechnung mit Python (mit Homebrew und Pip).
Programmieren mit Python und Tkinter
Ver- und Entschlüsselung mit Python
Python und Hardware-Verwenden von RS232C mit Python-
Fehler beim Spielen mit Python
Python mit Pyenv und Venv
Funktioniert mit Python und R.
Kommunizieren Sie mit FX-5204PS mit Python und PyUSB
Leuchtendes Leben mit Python und OpenCV
Roboter läuft mit Arduino und Python
Installieren Sie Python 2.7.9 und Python 3.4.x mit pip.
Neuronales Netzwerk mit OpenCV 3 und Python 3
AM-Modulation und Demodulation mit Python
Scraping mit Node, Ruby und Python
Scraping mit Python, Selen und Chromedriver
Kratzen mit Python und schöner Suppe
Fehler und Lösung bei der Installation von Python3 mit Homebrew auf einem Mac (Catalina 10.15)
JSON-Codierung und -Decodierung mit Python
Hadoop-Einführung und MapReduce mit Python
[GUI in Python] PyQt5-Drag & Drop-
[Python] Fehler- und Lösungsnotiz bei Verwendung von venv mit pyenv + anaconda
Lesen und Schreiben von NetCDF mit Python
Umgang mit Fehlern bei der Installation von Python und Pip mit Choco
Beschleunigen Sie Python mit numba grob
Ich habe mit PyQt5 und Python3 gespielt
Lesen und Schreiben von CSV mit Python
Mehrfachintegration mit Python und Sympy
Wenn matplotlib nicht mit python2.7 funktioniert
Koexistenz von Python2 und 3 mit CircleCI (1.0)
Bei Verwendung von MeCab mit virtualenv python
Vorsichtsmaßnahmen bei Verwendung von sechs mit Python 2.5
Sugoroku-Spiel und Zusatzspiel mit Python
FM-Modulation und Demodulation mit Python
[Python] Format, wenn to_csv mit Pandas
Ich habe die numerische Berechnung von Python durch Rust ersetzt und die Geschwindigkeit verglichen
Bilineare Interpolationsfunktion bei nichtlinearer Koordinatenkonvertierung mit Python und Numpy
Einstellungen bei Verwendung von Python 3-Anfragen und Beautiful Soup mit Crostini auf Chromebook
Wenn ich mit xonsh Screenfetch mache, kommt Python x.x heraus und es ist traurig
Kommunizieren Sie mit gRPC zwischen Elixir und Python
Berechnen Sie das Standardgewicht und zeigen Sie es mit Python an
Überwachen Sie Mojo-Ausfälle mit Python und Skype
Snippet für die Vollbit-Suche mit Python
[Python] Verwenden Sie und und oder beim Erstellen von Variablen
FM-Modulation und Demodulation mit Python Part 3
[Automatisierung] Bearbeiten Sie Maus und Tastatur mit Python
Passwortlose Authentifizierung mit RDS und IAM (Python)
Verwenden von Python und MeCab mit Azure Databricks
Hinweise beim Erstellen einer Umgebung mit Python
POST verschieden mit Python und empfange mit Flask
Bilder mit Pupil, Python und OpenCV aufnehmen
Zu beachtende Punkte bei der Lösung von DP-Problemen mit Python
Fraktal zum Erstellen und Spielen mit Python
Ein Memo mit Python2.7 und Python3 in CentOS
Verwenden Sie PIL oder Pillow mit Cygwin Python
Erstellen und entschlüsseln Sie Caesar-Code mit Python