Vektoren, Matrizen, Tensoren
Inhalt
Listen können als Vektoren (die man aus der Linearen Algebra kennt) und Tabellen als Matrizen dargestellt werden.
Für viele Berechnungen der Datenauswertung bietet die Python-Bibliothek NumPy passende Datentypen und Funktionen an. Um NumPy zu verwenden, importierst du die Bibliothek in Jupyter Notebook import numpy
.
Das zentrale Datenobjekt in NumPy ist das ndarray
. Der Name steht für n-dimensionales Array. Je nach Anzahl der Dimensionen nennt man diese Datenobjekte:
- 1 Dimension: Vektor
- 2 Dimensionen: Matrix
- 3 Dimensionen: Tensor
ndarray
ist deutlich schneller und speichersparender als Python-Listen und deshalb für große Datenmengen geeignet.
Die Methode zum Anlegen eines ndarray
lautet np.array( )
.
Rechnen mit ndarray
Mit ndarray
kannst du genau so rechnen, wie man es von der Vektor- und Matrizenrechnung kennt:
a = np.array([1,2]) b = np.array([3,4]) # Vektor vervielfachen print(2*a) # Ergebnis: [2 4] # Vektoren addieren print(a+b) # Ergebnis: [4 6] # elementweise Multiplikation (1*3, 2*4) print(a*b) # Ergebnis: [3 8] # Skalarprodukt berechnen (1*3 + 2*4) print(a@b) # Ergebnis: 11
In diesem Modul schauen wir uns an, wie wir mit Python mathematische Berechnungen durchführen, die für Data Science von Bedeutung sind. Dafür benutzen wir die Bibliothek NumPy, die vor allem mathematische Funktionen bietet, aber auch einen eigenen Datentyp mitbringt, das Objekt ndarray
, das sich besonders für die Berechnung von Vektoren und Matrizen eignet.
Listen können als Vektoren (die man aus der Linearen Algebra kennt) und Tabellen als Matrizen dargestellt werden. Oft steht man bei der Datenauswertung vor der Aufgabe, Gleichungen mit Vektoren oder Matrizen zu lösen. Hierbei kommen die mathematischen Verfahren der Vektor- und Matrizenrechnung zum Einsatz.
Für diese und weitere Berechnungen bietet die Python-Bibliothek NumPy passende Datentypen und Funktionen an. NumPy steht für Numerical Python und ist die verbreitetste Python-Bibliothek für die Arbeit mit numerischen Daten u.a. in Wissenschaft und Technik. Sie bildet auch die Basis für weitere Bibliotheken, wie Pandas und Matplotlib, die selbst NumPy-Funktionen verwenden. Deshalb sind manche NumPy-Funktionen auch dort vorhanden.
Um NumPy zu verwenden, musst du in Jupyter Notebook am Anfang deines Codes (bevor du die erste Funktion verwendest) die Bibliothek importieren. Damit du dir beim späteren Verwenden der NumPy-Datenobjekte Tipparbeit sparst, ist es üblich, diese als np
abzukürzen.
import numpy as np
Das zentrale Datenobjekt in NumPy ist das ndarray
. Der Name steht für n-dimensionales Array, also ein Datenobjekt, das je nach Bedarf Zeilen, Spalten oder weitere Achsen (Dimensionen) haben kann. Je nach Anzahl der Dimensionen bezeichnet man diese Datenobjekte in der Mathematik wie folgt:
- 1 Dimension: Vektor
- 2 Dimensionen: Matrix
- 3 Dimensionen: Tensor
ndarray
ist dabei lediglich der Klassenname für dieses n-dimensionale Datenobjekt. Die Methode zum Anlegen eines solchen Objekts lautet np.array( )
.
Du kannst ein ndarray
wie folgt anlegen:
# Vektor a = np.array([1, 2, 3]) # 2x2-Matrix b = np.array([[1, 2], [3, 4]]) # 2x2x2-Tensor c = np.array([[[1,2],[3,4]], [[5,6],[7,8]]])
oder indem du eine vorhandene Liste in ein ndarray
umwandelst:
a = [[1,2],[3,4]] a = np.array(a) print(a)
Ergebnis:
[[1 2]
[3 4]]
Beachte, dass ndarray
in Matrixform und ohne Kommas angezeigt wird.
ndarray
ist deutlich schneller und speichersparender als Python-Listen und deshalb für große Datenmengen geeignet. Einschränkungen sind, dass alle Elemente vom selben Datentyp sein müssen und die Größe der Liste unveränderlich ist. Es gibt also keinen append()
-Befehl.
Deswegen legt man ein ndarray
mit der nötigen Größe an und füllt es durch eine der folgenden Funktionen zero()
, ones()
, usw. mit Anfangswerten, die später überschrieben werden:
# 2x3-Matrix anlegen und füllen: np.zeros([2,3]) # füllt mit 0. np.ones([2,3]) # füllt mit 1. np.full([2,3],7) # füllt mit 7. np.random.random([2,3]) # füllt mit Zufallszahlen
Die Elemente sind standardmäßig float
, außer man legt sie durch den Parameter dtype
anders fest, z.B. als int
:
np.zeros([2,3], dtype=int) # füllt mit 0
ndarray
Der Vorteil von ndarray
ist, dass wir damit genau so rechnen können, wie man es von der Vektor- und Matrizenrechnung kennt.
a = np.array([1,2]) b = np.array([3,4]) # Vektor vervielfachen print(2*a) # Ergebnis: [2 4] # Vektoren addieren print(a+b) # Ergebnis: [4 6] # elementweise Multiplikation (1*3, 2*4) print(a*b) # Ergebnis: [3 8] # Skalarprodukt berechnen (1*3 + 2*4) print(a@b) # Ergebnis: 11
Die Rechenoperationen mit Matrizen und Tensoren funktionieren genauso wie mit Vektoren. Darüber hinaus gibt es für quadratische Matrizen die Berechnung der Determinante:
A = np.array([[1,2],[3,4]]) # Determinante berechnen: print(np.linalg.det(A))
Ergebnis: -2.
und das Invertieren der Matrix:
Ainv = np.linalg.inv(A) print(Ainv)
Ergebnis:
[[-2. 1. ]
[ 1.5 -0.5]]
Beachte, dass eine Matrix nur invertiert werden kann, wenn sie quadratisch ist und ihre Determinante ungleich Null ist. Wir werden das in der nächsten Einheit zum Lösen von Gleichungssystemen verwenden, mit denen man z.B. Produktionsprozesse beschreiben kann.