2  Erstellen von NumPy arrays

Typischerweise werden in Python Vektoren durch Listen und Matrizen durch geschachtelte Listen ausgedrückt. Beispielsweise würde man den Vektor

\[ (1, 2, 3, 4, 5, 6) \]

und die Matrix

\[ \begin{pmatrix} 1 & 2 & 3\\ 4 & 5 & 6 \end{pmatrix} \]

nativ in Python so erstellen:

liste = [1, 2, 3, 4, 5, 6]

matrix = [[1, 2, 3], [4, 5, 6]]

print(liste)
print(matrix)
[1, 2, 3, 4, 5, 6]
[[1, 2, 3], [4, 5, 6]]

Möchte man jetzt NumPy Arrays verwenden benutzt man den Befehl np.array().

liste = np.array([1, 2, 3, 4, 5, 6])

matrix = np.array([[1, 2, 3], [4, 5, 6]])

print(liste)
print(matrix)
[1 2 3 4 5 6]
[[1 2 3]
 [4 5 6]]

Betrachtet man die Ausgaben der print() Befehle fallen zwei Sachen auf. Zum einen fallen die Kommata weg und zum anderen wird die Matrix passend ausgegeben.

Es gibt auch die Möglichkeit, höherdimensionale Arrays zu erstellen. Dabei wird eine neue Ebene der Verschachtelung benutzt. Im folgenden Beispiel wird eine drei-dimensionale Matrix erstellt.

matrix_3d = np.array([[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]])

Es gilt als “good practice” Arrays immer zu initialisieren. Dafür bietet NumPy drei Funktionen um vorinitialisierte Arrays zu erzeugen. Alternativ können Arrays auch mit festgesetzten Werten initialisiert werden. Dafür kann entweder die Funktion np.zeros()verwendet werden die alle Werte auf 0 setzt, oder aber np.ones()welche alle Werte mit 1 initialisiert. Der Funktion wird die Form im Format [Reihen,Spalten] übergeben. Möchte man alle Einträge auf einen spezifischen Wert setzen, kann man den Befehl np.full() benutzen.

np.zeros([2,3])
array([[0., 0., 0.],
       [0., 0., 0.]])
np.ones([2,3])
array([[1., 1., 1.],
       [1., 1., 1.]])
np.full([2,3],7)
array([[7, 7, 7],
       [7, 7, 7]])

Der Trick beseht hierbei ein Array mit np.ones() zu initialisiere und dieses Array dann mit der Zahl x zu multiplizieren. Im folgenden Beispiel ist x = 5

np.ones([2,3]) * 5
array([[5., 5., 5.],
       [5., 5., 5.]])

Möchte man zum Beispiel für eine Achse in einem Plot einen Vektor mit gleichmäßig verteilten Werten erstellen, bieten sich in NumPy zwei Möglichkeiten. Mit den Befehlen np.linspace(Start,Stop,#Anzahl Werte) und np.arrange(Start,Stop,Abstand zwischen Werten) können solche Arrays erstellt werden.

np.linspace(0,1,11)
array([0. , 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1. ])
np.arange(0,10,2)
array([0, 2, 4, 6, 8])

Erstellen Sie jeweils ein NumPy-Array, mit dem folgenden Inhalt:

  1. mit den Werten 1, 7, 42, 99
  2. zehn mal die Zahl 5
  3. mit den Zahlen von 35 bis einschließlich 50
  4. mit allen geraden Zahlen von 20 bis einschließlich 40
  5. eine Matrix mit 5 Spalten und 4 Reihen mit dem Wert 4 an jeder Stelle
  6. mit 10 Werten die gleichmäßig zwischen 22 und einschlieslich 40 verteilt sind
# 1. 
print(np.array([1, 7, 42, 99]))
[ 1  7 42 99]
# 2. 
print(np.full(10,5))
[5 5 5 5 5 5 5 5 5 5]
# 3. 
print(np.arange(35, 51))
[35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50]
# 4. 
print(np.arange(20, 41, 2))
[20 22 24 26 28 30 32 34 36 38 40]
# 5. 
print(np.full([4,5],4))
[[4 4 4 4 4]
 [4 4 4 4 4]
 [4 4 4 4 4]
 [4 4 4 4 4]]
# 6. 
print(np.linspace(22, 40, 10))
[22. 24. 26. 28. 30. 32. 34. 36. 38. 40.]