Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.
| Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung Nächste Überarbeitung | Vorherige Überarbeitung | ||
| talit:python_advanced [2025-08-29 16:06] – [Beispiel] sca | talit:python_advanced [2025-08-29 16:33] (aktuell) – [Numba] sca | ||
|---|---|---|---|
| Zeile 380: | Zeile 380: | ||
| ===== Numba ===== | ===== Numba ===== | ||
| - | Numba ist ein Just-in-Time (JIT) Compiler für Python, der Funktionen mit Hilfe von LLVM in Maschinencode übersetzt. Besonders nützlich ist Numba für numerische Berechnungen mit NumPy, da es diese massiv beschleunigen kann – auch durch Parallelisierung. | + | Numba ist ein Just-in-Time (JIT) Compiler für Python, der Funktionen mit Hilfe von LLVM in Maschinencode übersetzt. Besonders nützlich ist Numba für **numerische Berechnungen mit NumPy**, da es diese **massiv beschleunigen** kann – auch durch **Parallelisierung**. |
| Installation | Installation | ||
| Zeile 386: | Zeile 386: | ||
| pip install numba | pip install numba | ||
| </ | </ | ||
| + | |||
| + | Tipps: | ||
| + | |||
| + | * **Vermeide Python-Objekte** (z. B. Listen, Dictionaries). | ||
| + | * Nutze **NumPy-Arrays** und primitive Datentypen (z.B. int). | ||
| + | * Verwende `numba.set_num_threads(n)` zur Kontrolle der Thread-Anzahl. | ||
| + | |||
| ==== Beispiel: Prinzahlen ==== | ==== Beispiel: Prinzahlen ==== | ||
| Zeile 414: | Zeile 421: | ||
| from numba import njit, prange | from numba import njit, prange | ||
| import numpy as np | import numpy as np | ||
| + | |||
| @njit | @njit | ||
| def is_prime(x): | def is_prime(x): | ||
| Zeile 421: | Zeile 428: | ||
| return False | return False | ||
| return True | return True | ||
| - | + | ||
| - | @njit(parallel=True) | + | @njit(parallel=True, fastmath=True) |
| def run(): | def run(): | ||
| n_max = 3e4 | n_max = 3e4 | ||
| Zeile 430: | Zeile 437: | ||
| nr_primes += 1 | nr_primes += 1 | ||
| return nr_primes | return nr_primes | ||
| + | |||
| nr_primes = run() | nr_primes = run() | ||
| print(nr_primes) | print(nr_primes) | ||
| Zeile 464: | Zeile 471: | ||
| from numba import njit, prange | from numba import njit, prange | ||
| - | @njit(parallel=True) | + | @njit(parallel=True, fastmath=True) |
| def berechne_sinus(x_vals): | def berechne_sinus(x_vals): | ||
| result = np.empty_like(x_vals) | result = np.empty_like(x_vals) | ||