In diesem NumPy Tutorial für Anfänger lernst du die Grundlagen zu NumPy kennen.
Du erlernst dabei verschiedene Konzepte, wie z.B. die Installation von NumPy, Arrays, Funktionen, Matrix Multiplikation, etc.
Nach diesem Tutorial besitzt du gute Anfängerkenntnisse und kannst diese praktisch umsetzen.
Starten wir mit der Frage, was NumPy eigentlich ist.
Was ist NumPy?
NumPy ist eine Open-Source-Bibliothek in Python, die sich für die Programmierung in folgenden Bereichen eignet:
- Wissenschaft
- Mathematik
- Ingenieurswesen
- Data-Science
Es ist eine nützliche Bibliothek, um mathematische und statistische Operationen in Python durchzuführen. Die Bibliothek eignet sich hervorragend für komplexe Berechnen wie bspw. für mehrdimensionale Arrays und Matrixmultiplikation.
Wenn du im wissenschaftlichen Bereich arbeitest, ist NumPy das Werkzeug, das du kennen solltest. Ebenso lässt sich NumPy einfach in C/C++ Anwendungen sowie Fortran integrieren.
Es wurde gebaut, um mit dem n-dimensionalen Array, linearer Algebra, Matrizen, Zufallszahlen, Fourier-Transformation, usw. zu arbeiten.
(Nein, du musst nicht wissen, was das alles bedeutet.)
Darüber hinaus werden viele weitere mathematische Operationen unterstützt.
In diesem Tutorial gehen wir auf die wesentlichen Funktionen ein, die du auch gut für die Arbeit mit TensorFlow (für Machine Learning) einsetzen kannst
Warum solltest du NumPy verwenden?
NumPy ist speichereffizient. Das bedeutet, dass es große Datenmengen besser handhaben kann als andere Python-Bibliothek.
Außerdem ist NumPy leicht zu bedienen, vor allem bei der Matrixmultiplikation und Umformung. Obendrein ist NumPy schnell. Tatsächlich lernen TensorFlow und SciKit, NumPy Arrays zu verwenden, um die Matrixmultiplikation im Backend zu berechnen.
Installation: Wie wird NumPy installiert?
Es gibt viele Möglichkeiten die NumPy Bibliothek zu installieren.
Lies dir dazu bitte die jeweiligen Installationsanleitungen auf unserem Blog durch.
Möglichkeit 1: Wähle diesen Weg, wenn du Python 3 bereits installiert hast:
Wenn du Python 3 bereits installiert hast, kannst du es über die Kommandozeile installieren. Du benötigst dafür folgenden Befehl:
pip install numpy
Möglichkeit 2: Du hast Python noch nicht installiert? Dann wähle diesen Weg:
Die einfachste Möglichkeit als Data-Scientist durchzustarten ist mit der Installation von Anaconda (Individual Edition). Es ist eine Open-Source-Software, die automatisch die beliebtesten Data-Science Bibliotheken installiert und dir in einer grafischen Oberfläche bereitstellt.
Anaconda kannst du hier herunterladen und installieren:
(Die Individual-Version ist kostenlos!)
https://www.anaconda.com/products/individual
NumPy wird standardmäßig mit Anaconda installiert. Falls NumPy, warum auch immer, nicht installiert ist, gib bitte folgenden Befehl in die Kommandozeile ein:
conda install -c anaconda numpy
Möglichkeit 3: Du benutzt das Jupyter-Notebook?
So installierst du NumPy in deinem Jupyter-Notebook:
importiere sys
!conda install --yes --prefix {sys.prefix} numpy
NumPy Tutorial - Importieren und aktuelle Version prüfen
Um NumPy zu importieren, öffnest du einen Editor (oder eine IDE) deiner Wahl.
Der Befehl zum Importieren der Bibliothek lautet:
import numpy as np
Obiger Code benennt den Namespace in np um. Das erlaubt uns, Numpy Funktionen, Methoden und Attribute mit "np" voranzustellen, anstatt "numpy" zu tippen.
Warum machen wir das? Weil Programmierer faul sind effizient arbeiten und nicht unnötig tippen wollen. Das ist die Standardabkürzung („np“), die du in der numpy-Literatur findest.
Um deine installierte Version von Numpy zu überprüfen, benutze folgenden Befehl:
print (np.__version__)
Ausgabe
1.18.0
Deine Numpy-Version kann sich von meiner Version unterscheiden. Das liegt daran, dass Numpy ständig weiterentwickelt wird.
Wenn du die gleiche oder eine höhere Version benutzt, hast du grundsätzlich alles richtig gemacht.
Was ist ein Python Numpy Array?
NumPy Arrays ähneln Listen, die du aus Python kennst. Doch grenzen sie sich auch von Python-Listen ab.
Wenn du neu im Thema bist, möchte ich dir kurz erklären, was ein Numpy-Array genau ist und wofür es eingesetzt wird.
Ein NumPy-Array ist eine Datenstruktur der numpy Bibliothek. Der Name der Bibliothek ist eigentlich eine Abkürzung für "Numeric Python" oder "Numerical Python".
Am besten lernst du, wenn du die Theorie in die Praxis umsetzt. Schau dir dafür das folgende Code-Beispiel an und baue es dann nach.
Arrays erstellen
Der einfachste Weg, ein Array in Numpy zu erstellen, ist die Verwendung einer Python-Liste.
Code-Beispiel – Einfache Python-Liste:
meinePythonListe = [1,5,3,7]
Um die o.g. Python-Liste in ein Numpy-Array zu konvertieren, verwendest du das Objekt np.array.
numpy_array_aus_liste = np.array(meinePythonListe)
So zeigst du den Inhalt der Liste an, um die Inhalte zu prüfen:
numpy_array_aus_liste
Ausgabe
array([1, 5, 3, 7])
In der Praxis ist es nicht notwendig, extra eine Python-Liste zu deklarieren. Die Operation kann kombiniert werden.
numpy.zeros()
Die Funktion numpy.zeros() oder np.zeros wird verwendet, um eine Matrix voller Nullen zu erzeugen.
In Python benutzt du numpy.zeros(), wenn du die „Weights“ während der ersten Iteration in TensorFlow oder bei anderen statistischen Aufgaben initialisierst.
numpy.zeros Syntax:
numpy.zeros(shape, dtype=float, order='C')
Python numpy.zeros() Parameter-Erklärung:
- Shape: ist die Form des numpy Null-Arrays
- Dtype: ist der Datentyp in numpy zeros. Er ist optional. Der Standardwert ist float64
- Order: Der Standardwert ist C, was ein wesentlicher Zeilenstil für numpy.zeros() in Python ist.
Python numpy.zeros() Code-Beispiel:
import numpy as np
np.zeros((2,2))
Code-Output:
array([[0., 0.],
[0., 0.]])
Beispiel für numpy Nullen mit int16-Datentyp
import numpy as np
np.zeros((2,2), dtype=np.int16)
Code-Ausgabe:
array([[0, 0],
[0, 0]], dtype=int16)
numpy.ones()
Die Funktion np.ones() wird verwendet, um eine Matrix voller Einsen zu erzeugen. numpy.ones() wird, ähnlich wie bei numpy.zeros, benutzt, wenn du die „Weights“ während der ersten Iteration in TensorFlow sowie anderen statistischen Aufgaben initialisierst.
Python numpy.ones() Syntax
numpy.ones(shape, dtype=float, order='C')
Python numpy.ones() Parameter
Nachfolgend erkläre ich dir die Parameter:
- Shape: ist die Form des np.ones Python Arrays.
- Dtype: ist der Datentyp in numpy ones. Er ist optional. Der Standardwert ist float64.
- Order: Der Standardwert ist C, was ein wesentlicher Zeilenstil ist.
Python numpy.ones() 2D-Array mit Datentyp - Code-Beispiel:
import numpy as np
np.ones((1,2,3), dtype=np.int16)
Code-Output:
array([[[1, 1, 1],
[1, 1, 1]]], dtype=int16)
numpy.reshape() und numpy.flatten() in Python
Daten umformen mit .reshape
In manchen Fällen musst du die Daten von breit auf lang umformen. Dafür haben wir in dem Numpy Tutorial auch die Funktion reshape mitaufgenommen, die häufig von Data Scientists benutzt wird.
Die Syntax lautet:
numpy.reshape(a, newShape, order='C')
Erklärung der Parameter:
- a: Array, das du umgestalten willst
- newShape: Die neue Wunschform
- Order: Standard ist C, was ein wesentlicher Reihenstil ist.
Code-Beispiel für numpy.reshape
import numpy as np
e = np.array([(1,2,3), (4,5,6)])
print(e)
e.reshape(3,2)
Code-Ausgabe:
# Vor Ausführung des Reshape-Befehls
[[1 2 3]
[4 5 6]]
# Nach Ausführung des Reshape-Befehls
array([[1, 2],
[3, 4],
[5, 6]])
Daten glätten mit .flatten
Wenn du mit einem neuronalen Netzwerk wie bspw. convnet arbeitest, musst du das Array glätten. Du kannst .flatten() verwenden.
Die Syntax dafür lautet:
numpy.flatten(order='C')
Erklärung des Parameters:
Order: Standardwert ist C, was ein wesentlicher Zeilenstil ist.
Code-Beispiel für numpy.flatten:
e.flatten()
Code-Output:
array([1, 2, 3, 4, 5, 6])
hstack
Mit hstack kannst du Daten horizontal anfügen. Dies ist eine äußerst hilfreiche Funktion in Numpy. Schau dir folgendes Code-Beispiel zu hstack an:
# hstack – Horizontales anfügen
import numpy as np
a = np.array([1,2,3])
b = np.array([4,5,6])
print('Horizontal Anfügen:', np.hstack((a, b)))
Code-Ausgabe:
Horizontal Anfügen: [1 2 3 4 5 6]
vstack
Mit vstack kannst du Daten vertikal anhängen. Lass uns dafür folgendes Beispiel anschauen:
## Vertikales Anfügen
import numpy as np
a = np.array([1,2,3])
b = np.array([4,5,6])
print('Vertikal Anfügen:', np.vstack((a, b)))
Code-Ausgabe:
Vertikal Anfügen: [[1 2 3]
[4 5 6]]
Zufallszahlen generieren
Respekt, wenn du es bis hierhin im Numpy Tutorial geschafft hast, kennst du bereits die wichtigsten 50%.
Um Zufallszahlen für die Gaußsche Verteilung zu generieren, verwendest du folgenden Befehl:
numpy.random.normal(loc, scale, size)
Erklärung der Parameter:
- Loc: Mittelwert. Verteilungszentrum.
- Scale: Standardabweichung.
- Size: Anzahl der Rückläufe
## Erzeuge zufällige Nummer aus der Normalverteilung
normales_array = np.random.normal(5, 0.5, 10)
print(normales_array)
Code-Output:
[4.83736618 4.76031334 4.45109149 5.43979423 5.28094061 5.2903193
5.12841653 5.65514849 4.49403497 5.5686984 ]
Wenn du die Verteilung visuell darstellst, sieht sie (mit 1000 Werten) ungefähr so aus:
Asarray
Die asarray()-Funktion wird verwendet, wenn du eine Eingabe in ein Array umwandeln willst. Die Eingabe kann eine Liste, ein Tupel, ein ndarray, etc. sein.
Code-Beispiel:
numpy.asarray(data, dtype=None, order=None)[source]
Parameter-Erklärung:
- data: Daten, die du in ein Array umwandeln willst.
- dtype: Dies ist ein optionales Argument. Wenn nicht angegeben, wird der Datentyp aus den Eingabedaten abgeleitet.
- order: Standard ist C, was ein essenzieller Zeilenstil ist. Andere Option ist F (Fortan-Stil).
Code-Beispiel:
Schaue dir die folgende 2D-Matrix mit vier Zeilen und vier Spalten an:
import numpy as np
A = np.matrix(np.ones((4,4)))
Wenn du den Wert der Matrix ändern möchtest, kannst du das nicht. Der Grund ist, dass es nicht möglich ist, eine Kopie zu ändern.
np.array(A)[2]=2
print(A)
Code-Output:
[[1. 1. 1. 1.]
[1. 1. 1. 1.]
[1. 1. 1. 1.]
[1. 1. 1. 1.]]
Matrix ist unveränderlich. Du kannst asarray() verwenden, wenn du eine Änderung im ursprünglichen Array hinzufügen möchtest. Schauen wir uns an, ob eine Änderung auftritt, wenn du den Wert der dritten Zeile mit dem Wert 2 ändern willst.
Code-Beispiel:
np.asarray(A)[2]=2
print(A)
Code-Erläuterung:
np.asarray(A): wandelt die Matrix A in ein Array um [2]: wählt die dritte Zeile aus
Code-Ausgabe:
[[1. 1. 1. 1.]
[1. 1. 1. 1.]
[2. 2. 2. 2.]
# neuer Wert
[1. 1. 1. 1.]]
numpy.arange()
numpy.arange() ist eine eingebaute Numpy-Funktion, die ein ndarray-Objekt zurückgibt, das gleichmäßig verteilte Werte innerhalb eines definierten Intervalls enthält. Wenn du zum Beispiel Werte von 1 bis 10 erzeugen möchtest, kannst du die Funktion numpy.arange() verwenden.
Code-Beispiel zu numpy.arrange:
numpy.arange(start, stop, step)
Parameter-Erklärung:
- start: Beginn des Intervalls
- stop: Ende des Intervalls
- step: Abstand zwischen den Werten. Standard Schritt ist 1
Beispiel:
import numpy np
np.arange(1, 11)
Code-Ausgabe:
array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
Wenn du den Schritt ändern willst, kannst du eine dritte Zahl in der Klammer hinzufügen. Das wird den Schritt ändern.
Code-Beispiel:
import numpy np
np.arange(1, 14, 4)
Code-Ausgabe:
array([ 1, 5, 9, 13])
Linspace
Linspace liefert gleichmäßig verteilte Samples.
Syntax für Linspace:
numpy.linspace(start, stop, num, endpoint)
Parameter-Erklärung von Linspace:
- Start: Startwert der Sequenz
- Stop: Endwert der Sequenz
- Num: Anzahl der zu generierenden Samples. Standard ist 50
- Endpoint: Wenn True (Standard), ist Stop der letzte Wert. Wenn False, wird der Stoppwert nicht mit einbezogen.
Code-Beispiel: Damit lassen sich z.B. 10 Werte von 1 bis 5 in gleichmäßigen Abständen erzeugen.
import numpy as np
np.linspace(1.0, 5.0, num=10)
Code-Ausgabe:
array([1. , 1.44444444, 1.88888889, 2.33333333, 2.77777778, 3.22222222, 3.66666667, 4.11111111, 4.55555556, 5. ])
Wenn du die letzte Ziffer nicht in das Intervall einbeziehen willst, kannst du endpoint auf false setzen:
np.linspace(1.0, 5.0, num=5, endpoint=False)
Code-Ausgabe:
array([1. , 1.8, 2.6, 3.4, 4.2])
LogSpace
LogSpace gibt geradzahlige Zahlen auf einer logarithmischen Skala zurück. LogSpace hat die gleichen Parameter wie np.linspace. Syntax:
numpy.logspace(start, stop, num, endpoint)
Code-Beispiel:
np.logspace(3.0, 4.0, num=4)
Code-Ausgabe:
array([ 1000. , 2154.43469003, 4641.58883361, 10000. ])
Wenn du die Speichergröße eines Elements in einem Array überprüfen willst, kannst du itemsize verwenden:
a = np.array([1,2,3], dtype=np.complex128)
a.itemize
Code-Ausgabe:
16 Jedes Element benötigt 16 Bytes.
Indizierung und Slicing
Das Slicen von Daten ist mit Numpy trivial. Wir werden die Matrize "e" zerschneiden. Beachte, dass du in Python die Klammern benutzen musst, um die Zeilen oder Spalten zurückzugeben.
## Slicing
import numpy as np
a = np.array([(1,2,3), (4,5,6)])
print(a)
Code-Ausgabe:
[[1 2 3]
[4 5 6]]
Denke daran, dass bei numpy das erste Array/Spalte bei 0 beginnt:
## Erste Spalte
print('Erste Zeile:', a[0])
## Zweite Spalte
print('Zweite Zeile:', a[1])
Code-Ausgabe:
Erste Zeile: [1 2 3]
Zweite Zeile: [4 5 6]
In Python, wie in vielen anderen Sprachen, gilt Folgendes:
- Die Werte vor dem Komma stehen für die Zeilen
- Wenn du eine Spalte auswählen willst, musst du : vor dem Spaltenindex hinzufügen.
- : bedeutet, dass du alle Zeilen der ausgewählten Spalte haben möchtest.
print('Zweite Spalte:', a[:,1])
# Output
Zweite Spalte: [2 5]
Du verwendest :, um alle Spalten bis zur Zweiten auszuwählen:
## Zweite Zeile, zwei Werte
print(e[1, :2])
# Output
[4 5]
Statistische Funktionen in Numpy mit Beispiel
NumPy hat einige nützliche statistische Funktionen, um Minimum, Maximum, Perzentil, Standardabweichung und Varianz, etc. aus den gegebenen Elementen im Array zu finden. Die Funktionen werden wie folgt erklärt -
Statistische Funktionen
Numpy ist mit der robusten statistischen Funktion ausgestattet, die im Folgenden aufgeführt ist
Funktion | Numpy |
Min | np.min() |
Max | np.max() |
Mittelwert | np.mean() |
Median | np.median() |
Standardabweichung | np.std() |
Schau dir folgendes Array an:
import numpy as np
normales_array = np.random.normal(5, 0.5, 10)
print(normales_array)
Code-Ausgabe:
[5.56171852 4.84233558 4.65392767 4.946659 4.85165567 5.61211317 4.46704244 5.22675736 4.49888936 4.68731125]
Code-Beispiele - Statistische Funktion
# Min. Wert
print(np.min(normal_array))
# Max. Wert
print(np.max(normal_array))
# Mittelwert - Arithm. Mittel
print(np.mean(normal_array))
# Median
print(np.median(normal_array))
# Standardabweichung
print(np.std(normal_array))
Code-Ausgabe:
4.467042435266913
5.612113171990201
4.934841002270593
4.846995625786663
0.3875019367395316
numpy.dot product
Numpy.dot product ist eine mächtige Bibliothek für Matrixberechnungen.
Du kannst zum Beispiel das Punktprodukt mit np.dot berechnen. Numpy.dot product ist das Punktprodukt von a und b. numpy.dot() in Python behandelt die 2D-Arrays und führt Matrixmultiplikationen durch.
Code-Beispiel:
numpy.dot(x, y, out=None)
Parameter
x,y: Eingabe-Arrays. x und y sollten beide 1-D oder 2-D sein, damit die Funktion np.dot() funktioniert out: Dies ist das Ausgangsargument, wenn 1-D Array Skalar zurückgegeben werden soll. Ansonsten sollte ndarray zurückgegeben werden.
Out: Die Funktion numpy.dot() in Python gibt ein Punktprodukt von zwei Arrays x und y zurück. Die Funktion dot() gibt einen Skalar zurück, wenn sowohl x als auch y 1-D sind; andernfalls gibt sie ein Array zurück. Wenn 'out' angegeben wird, dann wird es zurückgegeben.
Beispiel:
# Lineare Algebra
## Produkt aus zwei Arrays
a = np.array([1,2])
b = np.array([4,5])
# Output: 1*4+2*5
np.dot(a, b)
Code-Ausgabe:
NumPy Matrix-Multiplikation mit np.matmul()
Matrix-Multiplikation
Die Numpu matmul() Funktion wird verwendet, um das Matrixprodukt von 2 Arrays zurückzugeben. Hier ist wie es funktioniert 1) 2-D Arrays, sie gibt das normale Produkt zurück 2) Dimensionen > 2, das Produkt wird als ein Stapel von Matrizen behandelt 3) 1-D Array wird zuerst in eine Matrix umgewandelt, und dann wird das Produkt berechnet.
numpy.matmul(x, y, out=None)
Hier, x,y: Eingabe-Arrays. Skalare nicht erlaubt out: Dies ist ein optionaler Parameter. Normalerweise wird die Ausgabe in ndarray gespeichert Beispiel: Auf die gleiche Weise kannst du die Multiplikation von Matrizen mit np.matmul berechnen.
# Matmul: Matrizenprodukt zweier Arrays
h = [[1,2],[3,4]]
i = [[5,6],[7,8]]
## Berechnung: 1*5+2*7 = 19
np.matmul(h, i)
Code-Ausgabe:
array([[19, 22],
[43, 50]])
Determinante
Wenn du die Determinante berechnen musst, kannst du np.linalg.det() verwenden. Beachte, dass NumPy sich um die Dimension kümmert.
## Determinante 2*2 Matrix
### Berechnung: 5*8-7*6
np.linalg.det(i)
Code-Ausgabe:
-2.000000000000005
Fazit zum Numpy Tutorial
In diesem Numpy Tutorial hast du gelernt, wie du NumPy installierst. Weiterhin hast du einige grundlegende Konzepte und Funktionen, sowie die Matrixmultiplikation kennengelernt. Ich hoffe, dass dieses NumPy-Tutorials hilfreich für dich gewesen ist.
Mein Ziel war es, eine gute Einführung und Übersicht über die Grundlagen zu geben, damit du sie in die Praxis umsetzen kannst. Du solltest nun über genug Wissen verfügen, um mit diesen Numpy-Werkzeugen selbstständig arbeiten zu können. Wenn du noch etwas Spezielles benötigst oder möchtest, dass ich es gründlicher behandle, kannst du gerne einen Kommentar hinterlassen.
Viel Spaß beim Herumspielen mit NumPy. Nächste Woche gibt es ein Tutorial zur Python-Bibliothek namens Pandas, die du als angehender Data-Scientist ebenfalls benötigst, um Daten auszuwerten und zu visualisieren.
Wenn du gerade erst mit der Programmierung anfängst, schau dir die vielen weiteren Tutorials sowie Projekte auf unserer Webseite an, um reibungslos durchzustarten.
- Programmiere echte Apps als Anfänger
- Keine Installation, sofort loslegen
- Komplett praxisbezogen
- Zugriff auf Online-Editor