Einführung in NumPy linspace()
In diesem Tutorial erfahren Sie, wie Sie die Funktion NumPy linspace() nutzen können, um in Python ein Array mit gleichmäßig verteilten numerischen Werten zu generieren.
Wir werden uns die Syntax von NumPy linspace() ansehen und anhand von Beispielen die Anwendungsmöglichkeiten dieser Funktion veranschaulichen.
Hinweis: Für dieses Tutorial wird vorausgesetzt, dass Python und NumPy bereits auf Ihrem System installiert sind.
Sollte NumPy noch nicht installiert sein, haben wir eine kurze Installationsanleitung für Sie zusammengestellt.
Legen wir los!
Installation und Import von NumPy
Bevor wir mit dem eigentlichen Tutorial beginnen, werfen wir einen kurzen Blick auf die notwendigen Schritte zur Installation der NumPy-Bibliothek.
⏩ Falls Sie NumPy bereits installiert haben, können Sie direkt zum nächsten Abschnitt springen.
- Wenn Sie Google Colab verwenden, eine Cloud-basierte Jupyter-Notebook-Umgebung, können Sie NumPy direkt importieren und mit dem Programmieren beginnen. (Empfohlen für dieses Tutorial ✅)
- Wenn Sie eine lokale Entwicklungsumgebung einrichten möchten, empfehlen wir die Installation der Anaconda-Distribution von Python. Anaconda enthält mehrere nützliche Pakete vorinstalliert. Sie können das Installationsprogramm für Ihr Betriebssystem herunterladen. Der Installationsvorgang ist in wenigen Minuten abgeschlossen.⌛
- Auch wenn Sie Python bereits auf Ihrem Computer installiert haben, können Sie die Anaconda-Distribution weiterhin nutzen. Mit Conda oder Pip können Sie Pakete installieren und verwalten. Führen Sie dazu einen der folgenden Befehle in der Anaconda-Eingabeaufforderung aus, um NumPy zu installieren.
# NumPy mit conda installieren conda install numpy # NumPy mit pip installieren pip install numpy
Importieren Sie als Nächstes NumPy unter dem Alias np mit folgendem Befehl. Dadurch können Sie auf NumPy mit „np“ verweisen, ohne jedes Mal „numpy“ ausschreiben zu müssen, wenn Sie auf eine Funktion zugreifen möchten.
import numpy as np
Wir verwenden die Punktnotation, um auf Funktionen in der NumPy-Bibliothek zuzugreifen, z.B.: np.<Funktionsname>.
Die Bedeutung gleichmäßig verteilter Zahlen
Bei der Arbeit mit NumPy-Arrays ist es oft erforderlich, ein Array mit gleichmäßig verteilten Zahlen in einem bestimmten Intervall zu erstellen.
Bevor wir fortfahren, betrachten wir kurz eine ähnliche Funktion, np.arange().
NumPy linspace() im Vergleich zu NumPy arange()
Wenn Sie NumPy bereits verwendet haben, ist es wahrscheinlich, dass Sie np.arange() zur Erstellung von Zahlenarrays innerhalb eines bestimmten Bereichs genutzt haben.
Wie Sie wissen, liefert np.arange(start, stop, step) ein Array von Zahlen, beginnend bei ’start‘ und bis zu, aber ohne ’stop‘, in Schritten von ’step‘. Der Standardwert für ’step‘ ist 1.
Der Wert von ’step‘ ist jedoch nicht immer direkt ersichtlich. Betrachten wir dies genauer.
Nehmen wir an, Sie benötigen vier gleichmäßig verteilte Zahlen zwischen 0 und 1. In diesem Fall ist die Schrittweite 0,25. Wenn Sie jedoch np.arange() verwenden, wird der Wert 1 nicht im Ergebnis enthalten sein. Sie müssten also ein Intervall wählen, das über den Stoppwert hinausgeht.
Die folgende Abbildung illustriert einige weitere Beispiele, in denen Sie eine bestimmte Anzahl gleichmäßig verteilter Punkte innerhalb eines Intervalls [a, b] benötigen.
Gleichmäßig verteilte Punkte in einem Intervall
Das erste Beispiel mit vier gleichmäßig verteilten Punkten in [0, 1] war noch relativ einfach. Hier war die Schrittweite zwischen den Punkten 0,25.
Stellen Sie sich jedoch ein komplexeres Beispiel vor, bei dem Sie 7 gleichmäßig verteilte Punkte zwischen 1 und 33 benötigen. Hier ist die Schrittweite möglicherweise nicht so einfach zu ermitteln. Sie können die Schrittweite in diesem Fall zwar manuell berechnen.
Aber genau hier kommt np.linspace() ins Spiel, um Ihnen die Arbeit zu erleichtern! 😄
Einsatz von NumPy linspace()
Wenn Sie np.linspace() verwenden, müssen Sie lediglich die Anzahl der Punkte innerhalb des Intervalls angeben, ohne sich um die Schrittweite kümmern zu müssen. Sie erhalten das gewünschte Array als Ergebnis.
Nach dieser Einführung wollen wir uns im nächsten Abschnitt die Syntax von NumPy linspace() genauer ansehen.
Syntax von NumPy linspace()
Die Syntax von NumPy linspace() ist wie folgt definiert:
np.linspace(start, stop, num, endpoint, retstep, dtype, axis)
Auf den ersten Blick mag diese Syntax mit den vielen Parametern kompliziert erscheinen.
Die meisten Parameter sind jedoch optional. Wir werden uns in wenigen Minuten mit einer einfacheren Syntax beschäftigen.
Beginnen wir mit der Analyse der oben genannten Syntax:
- ’start‘ und ’stop‘ sind der Anfangs- bzw. Endpunkt des Intervalls. Beide, ’start‘ und ’stop‘, können entweder Skalare oder Arrays sein. In diesem Tutorial beschränken wir uns auf skalare Start- und Endwerte.
- ’num‘ ist die Anzahl der gleichmäßig verteilten Punkte und ein optionaler Parameter mit dem Standardwert 50.
- ‚endpoint‘ ist ebenfalls ein optionaler Parameter, der entweder ‚True‘ oder ‚False‘ sein kann.
- Der Standardwert ist ‚True‘, was bedeutet, dass der Endpunkt standardmäßig im Intervall enthalten ist. Sie können ihn jedoch auf ‚False‘ setzen, um den Endpunkt auszuschließen.
- ‚retstep‘ ist ein weiterer optionaler Parameter, der die booleschen Werte ‚True‘ oder ‚False‘ annimmt. Wenn er auf ‚True‘ gesetzt ist, wird die Schrittweite zurückgegeben.
- ‚dtype‘ ist der Datentyp der Zahlen im Array. Der Typ wird in der Regel als Float abgeleitet und muss nicht explizit angegeben werden.
- ‚axis‘ ist ein weiterer optionaler Parameter, der die Achse angibt, entlang der die Zahlen gespeichert werden sollen. Dies ist nur relevant, wenn die Start- und Stoppwerte selbst Arrays sind.
▶️ Was gibt np.linspace() zurück?
Es gibt ein N-dimensionales Array mit gleichmäßig verteilten Zahlen zurück. Wenn der Parameter ‚retstep‘ auf ‚True‘ gesetzt ist, gibt es zusätzlich die Schrittweite zurück.
Zusammenfassend lässt sich die Syntax für die Verwendung von np.linspace() wie folgt vereinfachen:
np.linspace(start, stop, num)
Die obige Codezeile gibt ein Array mit ’num‘ gleichmäßig verteilten Zahlen im Intervall [start, stop] zurück.
Nachdem wir die Syntax nun kennen, beginnen wir mit einigen Codebeispielen.
Wie man Arrays mit gleichmäßig verteilten Zahlen mit NumPy linspace() erstellt
#1. Erstellen wir als erstes Beispiel ein Array mit 20 gleichmäßig verteilten Zahlen im Intervall [1, 5].
Sie können die Werte für ’start‘, ’stop‘ und ’num‘ als Schlüsselwortargumente angeben. Dies wird im folgenden Codebeispiel gezeigt:
import numpy as np arr1 = np.linspace(start = 1,stop = 5,num = 20) print(arr1)
Ausgabe:
[1. 1.21052632 1.42105263 1.63157895 1.84210526 2.05263158 2.26315789 2.47368421 2.68421053 2.89473684 3.10526316 3.31578947 3.52631579 3.73684211 3.94736842 4.15789474 4.36842105 4.57894737 4.78947368 5. ]
Beachten Sie, dass die Zahlen im Array bei 1 beginnen und bei 5 enden, einschließlich beider Endpunkte. Beachten Sie auch, dass die Zahlen, einschließlich der Punkte 1 und 5, im zurückgegebenen Array als Float dargestellt werden.
#2. Im vorherigen Beispiel haben wir die Werte für ’start‘, ’stop‘ und ’num‘ als Schlüsselwortargumente übergeben. Wenn Sie die Argumente in der richtigen Reihenfolge übergeben, können Sie sie ebenso gut als Positionsargumente verwenden, wie unten gezeigt.
import numpy as np arr2 = np.linspace(1,5,20) print(arr2)
Ausgabe:
[1. 1.21052632 1.42105263 1.63157895 1.84210526 2.05263158 2.26315789 2.47368421 2.68421053 2.89473684 3.10526316 3.31578947 3.52631579 3.73684211 3.94736842 4.15789474 4.36842105 4.57894737 4.78947368 5. ]
#3. Erstellen wir nun ein weiteres Array, bei dem wir ‚retstep‘ auf ‚True‘ setzen.
Das bedeutet, dass die Funktion nun sowohl das Array als auch die Schrittweite zurückgibt. Wir können diese dann in zwei Variablen entpacken, ‚arr3′ für das Array und ’step_size‘ für die Schrittweite.
Der folgende Code zeigt, wie dies funktioniert.
import numpy as np arr3, step_size = np.linspace(1,5,20,retstep = True) print(arr3)
Ausgabe:
[1. 1.21052632 1.42105263 1.63157895 1.84210526 2.05263158 2.26315789 2.47368421 2.68421053 2.89473684 3.10526316 3.31578947 3.52631579 3.73684211 3.94736842 4.15789474 4.36842105 4.57894737 4.78947368 5. ]
Ausgabe:
print(step_size) 0.21052631578947367
#4. Setzen wir als letztes Beispiel ‚endpoint‘ auf ‚False‘ und prüfen, was passiert.
import numpy as np arr4 = np.linspace(1,5,20,endpoint = False) print(arr4)
Ausgabe:
[1. 1.2 1.4 1.6 1.8 2. 2.2 2.4 2.6 2.8 3. 3.2 3.4 3.6 3.8 4. 4.2 4.4 4.6 4.8]
Im zurückgegebenen Array sehen Sie, dass der Wert 1 enthalten ist, während der Wert 5 fehlt. Der letzte Wert im Array ist zufällig 4,8. Dennoch haben wir 20 Zahlen erzeugt.
Bisher haben wir nur Arrays mit gleichmäßig verteilten Zahlen erzeugt. Im nächsten Abschnitt werden wir diese Zahlen visualisieren.
Visualisierung von gleichmäßig verteilten Zahlen in einem Intervall
In diesem Abschnitt verwenden wir das Intervall [10, 15] als Beispiel. Wir werden np.linspace() verwenden, um zwei Arrays mit 8 bzw. 12 Punkten zu erstellen.
Anschließend können wir die Plotfunktion der Matplotlib-Bibliothek verwenden, um die erzeugten Arrays grafisch darzustellen.
Zur Veranschaulichung werden wir die beiden Arrays mit N1 = 8 und N2 = 12 gleichmäßig verteilten Punkten auf unterschiedlichen Positionen entlang der y-Achse positionieren.
Das folgende Codebeispiel demonstriert dies.
import numpy as np import matplotlib.pyplot as plt N1 = 8 N2 = 12 a = 10 b = 15 y1 = np.zeros(N1) y2 = np.zeros(N2) x1 = np.linspace(a, b, N1) x2 = np.linspace(a, b, N2) plt.plot(x1, y1-0.5, 'o') plt.plot(x2, y2 + 0.5, 'o') plt.ylim([-1, 1]) plt.title(f'Gleichmäßig verteilte Zahlen im Intervall [{a},{b}]') plt.xlabel('Intervall') plt.show()
Das Erzeugen gleichmäßig verteilter Punkte kann sehr nützlich sein, wenn man mit mathematischen Funktionen arbeitet. Das wollen wir im nächsten Abschnitt betrachten.
Verwendung von NumPy linspace() mit mathematischen Funktionen
Nachdem Sie mit np.linspace() ein Array mit gleichmäßig verteilten Zahlen erzeugt haben, können Sie die Werte mathematischer Funktionen in diesem Intervall berechnen.
Im folgenden Codebeispiel erzeugen Sie zunächst 50 gleichmäßig verteilte Punkte im Intervall von 0 bis 2π. Anschließend erstellen Sie das Array ‚y‘ mithilfe von np.sin() auf dem Array ‚x‘. Beachten Sie, dass Sie den ’num‘-Parameter auch weglassen können, da der Standardwert 50 ist. Wir verwenden ihn hier jedoch explizit.
Als Nächstes können wir die Sinusfunktion im Intervall [0, 2π] grafisch darstellen. Dazu verwenden wir matplotlib, wie bereits im vorherigen Beispiel. Die Funktion ‚plot()‘ aus ‚matplotlib.pyplot‘ wird verwendet, um ein Liniendiagramm zu erstellen.
import numpy as np import matplotlib.pyplot as plt N = 50 a = 0.0 b = 2*np.pi x = np.linspace(a, b, N) y = np.sin(x) plt.plot(x, y, marker = "o") plt.ylim([-1, 1]) plt.title(f'y = sin(x)') plt.xlabel('x ---->') plt.show()
Führen Sie den obigen Code nun mit N = 10 aus. Sie erhalten ein Diagramm wie in der Abbildung unten dargestellt.
Wie Sie sehen, ist das Diagramm nicht sehr glatt, da wir nur 10 Punkte im Intervall verwendet haben.
Je mehr Punkte Sie verwenden, desto glatter wird die Darstellung der Funktion.
Zusammenfassung
Hier ist eine kurze Zusammenfassung der wichtigsten Erkenntnisse:
- np.linspace(start, stop, num) gibt ein Array mit ’num‘ gleichmäßig verteilten Zahlen im Intervall [start, stop] zurück.
- Setzen Sie den optionalen Parameter ‚endpoint‘ auf ‚False‘, um den Endpunkt auszuschließen, und das Intervall auf [start, stop).
- Setzen Sie optional ‚retstep‘ auf ‚True‘, um auch die Schrittweite zurückzugeben.
- Erstellen Sie Arrays mit gleichmäßigen Abständen mit np.linspace() und verwenden Sie dieses Array dann mit mathematischen Funktionen.
Ich hoffe, Sie verstehen nun, wie np.linspace() funktioniert. Sie können die obigen Beispiele in einem Jupyter-Notebook selbst ausführen. Sehen Sie sich dazu unsere Anleitung zu Jupyter-Notebooks oder andere Jupyter-Alternativen an.
Bis zum nächsten Python-Tutorial. Bis dahin: Programmieren Sie weiter! 😀