NumPy ist ein Paket, welches Python um Funktionen für das schnelle Rechnen mit großen Zahlenmengen (Matrizen, Vektoren) erweitert. NumPy ist im Python-Ökosystem der De-Facto-Standard für numerische Berechnungen wie beispielsweise das Lösen großer linearer oder nichtlinearer Gleichungssysteme.
import numpy as npGrundlage für die Arbeit mit NumPy sind die NumPy-Arrays, welche zur Darstellung von Vektoren und Matrizen dienen.
3.4.1NumPy-Arrays erstellen¶
np.array([4, 5, 2, 3]) # aus einer Listearray([4, 5, 2, 3])np.zeros(4) # eindimensionales Array mit Nullenarray([0., 0., 0., 0.])np.ones((3, 2)) # zweidimensionales Array mit Einsenarray([[1., 1.],
[1., 1.],
[1., 1.]])np.eye(5) # Einheitsmatrixarray([[1., 0., 0., 0., 0.],
[0., 1., 0., 0., 0.],
[0., 0., 1., 0., 0.],
[0., 0., 0., 1., 0.],
[0., 0., 0., 0., 1.]])3.4.2Zugriff auf Array-Elemente¶
a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
aarray([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])print(a[0, 0]) # 1. Zeile, 1. Spalte
print(a[1, 0]) # 2. Zeile, 1. Spalte
print(a[-1, -1]) # letzte Zeile, letzte Spalte1
4
9
a[1:3, :2] # 2. und 3. Zeile, 1. und 2. Spaltearray([[4, 5],
[7, 8]])a[0, :] # 1. Zeile, alle Spaltenarray([1, 2, 3])3.4.3Eigenschaften von Arrays¶
a.shape # Größe (Zeilen, Spalten)(3, 3)a.dtype # Datentyp der Einträgedtype('int64')b = np.array([4.1, 6, 3, 5, 4, 3])
print(b.shape)
print(b.dtype)(6,)
float64
3.4.4Rechnen mit Arrays¶
a = np.array([4.1, 6, 3])
b = np.array([5, 4, 3])
print(2 * a + b)[13.2 16. 9. ]
print(a * b) # elementweises Produkt[20.5 24. 9. ]
A = np.array([[1, 2], [3, 4]])
print(A)[[1 2]
[3 4]]
print(A * A) # elementweises Produkt[[ 1 4]
[ 9 16]]
print(np.sin(A)) # Sinus elementweise[[ 0.84147098 0.90929743]
[ 0.14112001 -0.7568025 ]]
3.4.5Arrays vergleichen¶
a = np.array([1, 2, 3])
b = np.array([-1, 3, 3])
print(a > b)[ True False False]
c = a > b # Zuweisung (!) des Vergleichsergebnisses an c
print(c.any()) # mindestens ein Eintrag True?
print(c.all()) # alle Einträge True?True
False
3.4.6Weitere Möglichkeiten für den Elementzugriff¶
a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
aarray([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])a[a > 3]array([4, 5, 6, 7, 8, 9])a[np.logical_and(a > 3, a < 6)]array([4, 5])a[a > 4] = 20
aarray([[ 1, 2, 3],
[ 4, 20, 20],
[20, 20, 20]])3.4.7Zufallszahlen¶
Für Tests und Simulationen sind Zufallszahlen sehr nützlich. Um Zufallszahlen zu erzeugen, muss zunächst der Zufallszahlengenerator von NumPy mit einem Startwert initialisiert werden. Der Startwert legt die Folge der generierten Zufallszahlen fest, sodass bei späterer Wiederholung von Rechnungen sehr leicht wieder die gleichen Zufallszahlen verwendet werden können.
rng = np.random.default_rng(123) # wie der Startwert gewählt wird, ist egalrng.integers(23, 42, (4, 10)) # ganze Zahlen von 23 bis 41array([[23, 35, 34, 24, 40, 27, 27, 26, 29, 26],
[29, 38, 31, 40, 31, 28, 37, 38, 39, 39],
[23, 32, 28, 27, 27, 38, 38, 27, 30, 37],
[25, 34, 31, 40, 37, 27, 38, 38, 27, 32]])rng.uniform(0, 2, (4, 4)) # gleichverteilt auf [0, 2]array([[0.46311125, 0.33180799, 0.99557794, 1.16544928],
[0.36867597, 0.02978983, 0.94226646, 1.45648666],
[1.83720098, 1.25106801, 1.83424515, 1.7293805 ],
[0.43628575, 1.73225486, 1.46150387, 0.55573058]])