Eine Operation auf allen Werten gleichzeitig
Vektorisierung heißt, denselben Rechenschritt in einem einzigen Aufruf auf ein ganzes Feld von Zahlen anzuwenden, statt Wert für Wert in einer Schleife. Auf diesem Modell beruhen Bibliotheken wie NumPy und jede GPU.
Ein Fotolabor erhöht die Helligkeit von zwölf Millionen Bildpunkten um denselben Betrag. Kein Bildpunkt hängt vom anderen ab, also muss keiner warten.
Am Ende dieser Lektion
Notiz
Ich kann eine Schleife über eine Liste durch eine einzige Operation auf alle Elemente ersetzen.
Schlüsselwörter
| Begriff | Was er bedeutet | Beispiel |
|---|---|---|
| Feld | viele Zahlen gleicher Art in einer festen Reihenfolge (Array) | |
| Elementweise | jede Position für sich, mit der Position gegenüber | a[0] + b[0] |
| Vektorisierung | eine Operation auf ein ganzes Feld statt einer Schleife | |
| NumPy | eine Python-Bibliothek zum Rechnen mit Feldern | |
| Datenparallel | jedes Element wird unabhängig von den anderen bearbeitet |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Eine Schleife bearbeitet ein Element nach dem anderen
In einer Schleife nimmt Python einen Wert, rechnet und geht zum nächsten. Jeder Durchlauf ist mindestens ein Python-Schritt.
Der Code zählt sie mit: Pro Zahl sind es zwei, ein Multiplizieren und ein Addieren.
Quadratsumme mit Schleife und Schrittzähler
# Quadratsumme von 1 bis n, Wert fuer Wert in einer Schleife.
n = 10
summe = 0
operationen = 0
for zahl in range(1, n + 1):
summe = summe + zahl * zahl
operationen = operationen + 2
print("Quadratsumme:", summe)
print("Rechenschritte in der Schleife:", operationen)
# Setzen Sie n auf 1000 und starten Sie erneut.
Eine vektorisierte Operation ist ein einziger Aufruf
Mit NumPy steht die ganze Rechnung in einem Aufruf: Das Feld mit sich selbst multiplizieren und alles aufsummieren. Die Schleife läuft dann nicht mehr in Python, sondern in schnellem, fertig übersetztem Code.
Das Lab-Skript vectors.py rechnet beide Wege für n gleich 1000. Es zählt Rechenschritte, es misst keine Zeit.
Beide Wege für n gleich 1000
docker exec jupyter python3 steps/vectors.pyHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Gleiches Ergebnis, aber unterschiedlich viele Schritte
Das Skript gibt in englischen Wörtern aus: Beide Ergebnisse sind 333833500 und gleich. Die Schleife braucht 2000 Python-Schritte, NumPy einen.
Die Vektorisierung ändert also nicht das Ergebnis. Sie ändert, wer die Wiederholung ausführt.
Elementweise heißt: Position für Position
Bei einer elementweisen Operation rechnet jede Position nur mit der Position gegenüber. Aus zwei Feldern gleicher Länge wird ein neues Feld dieser Länge.
Weil keine Position die andere braucht, ist die Reihenfolge egal. Das ist es, was eine GPU nutzt.
Zwei Felder, vier Operationen
| Position | a | b | a + b | a - b | a * b |
|---|---|---|---|---|---|
| 0 | 1 | 10 | 11 | -9 | 10 |
| 1 | 2 | 20 | 22 | -18 | 40 |
| 2 | 3 | 30 | 33 | -27 | 90 |
| 3 | 4 | 40 | 44 | -36 | 160 |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Ein Feld mit 2 multiplizieren
docker exec jupyter python3 -c "import numpy as np; print(np.arange(1, 6) * 2)"Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Zwei Felder elementweise addieren
docker exec jupyter python3 -c "import numpy as np; print(np.arange(1, 6) + np.arange(10, 60, 10))"Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Dieselbe Rechnung für jeden Bildpunkt
# Die Helligkeit von vier Bildpunkten: dieselbe Rechnung fuer jeden.
helligkeit = [10, 200, 35, 90]
neu = []
for wert in helligkeit:
neu.append(wert + 10)
print(neu)
# Aendern Sie wert + 10 in wert * 2 und starten Sie erneut.
Ein häufiger Fehler
Warnung
Viele denken, eine Operation auf dem ganzen Feld sei nur eine kürzere Schreibweise. Sie ist mehr: Die Wiederholung läuft in einer Bibliothek, die sie besser planen kann, und auf einer GPU sogar gleichzeitig. Voraussetzung ist, dass jede Position unabhängig bleibt.
Weiterführend
Welche dieser Aufgaben lässt sich elementweise lösen: die Summe aller Werte, die Verdopplung aller Werte oder die Suche des größten Werts? Begründen Sie es mit der Frage, ob jede Position für sich rechnen kann.
Die Antwort kommt in der Lektion über Prozesse wieder: Dort wird aufgeteilt und zusammengeführt.