Skip to content

NumPy Arrays

Die zentrale Datenstruktur in numpy ist das np.ndarray (kurz array). Anders als eine Liste kann ein array aus Effizienzerwägungen nur einen homogenen Datentyp beinhalten. Das erlaubt eine besondere Speicherung der Daten, die für die effiziente Implementierung der Algorithmen in numpy und den zugrundeliegenden Bibliotheken unerlässlich ist.

Ein Datentyp innerhalb des arrays wird np.dtype genannt. Dieser dtype ist inhaltlich nahe an den Datentypen, die wir bereits aus Python selbst kennen: so stehen hier wieder Ganzzahlen und Dezimalzahlen zur Verfügung. Während die Dezimalzahlen sich genauso verhalten wie in Python ist zu berücksichtigen, dass (wiederum aus Effizienzgründen) die Ganzzahlen in numpy einen festen Wertebereich haben. Häufig verwendete Datentypen und deren Einschränkungen sind:

Datentyp Wertebereich
np.int8 -128 bis 127
np.int32 -2147483648 bis 2147483647
np.int64 -9223372036854775808 bis 9223372036854775807
np.uint8 0 bis 255
np.uint16 0 bis 65535
np.uint32 0 bis 4294967295
np.uint64 0 bis 18446744073709551615
np.float64 64-bit IEEE 754 (double precision)

Es ist einfach, aus Listen arrays zu erstellen:

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

Bei verschachtelten Listen gleicher Länge wird ein mehrdimensionales array erstellt:

values = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
array = np.array(values)

Die Größe eines arrays kann mit der Eigenschaft .shape abgefragt werden:

values = [[1, 2, 3], [4, 5, 6]]
array = np.array(values)
print (array.shape) # (2, 3)

Hier kommen die Anzahl der Zeilen zuerst, dann die Anzahl der Spalten. Eine Dimension wird in numpy als axis bezeichnet. Umgekehrt kann ein array auch in eine Liste umgewandelt werden:

values = [[1, 2, 3], [4, 5, 6]]
array = np.array(values)
print (array.tolist()) # [[1, 2, 3], [4, 5, 6]]

Viele Operationen erfolgen solange möglich auf den Originaldaten ohne sie zu kopieren. Das nennt numpy views. So ist z.B. die Transponierte einer Matrix über .T als view zugänglich:

values = [[1, 2, 3], [4, 5, 6]]
array = np.array(values)
print (array.T) # [[1, 4], [2, 5], [3, 6]]

Oder aber die Form eines arrays kann mittels reshape geändert werden, was ebenfalls ein view erzeugt, also die Daten nicht nochmal kopiert.

values = [1, 2, 3, 4]
array = np.array(values)
reshaped = array.reshape(2, 2)
print (reshaped) # [[1, 2], [3, 4]]

Auf jedem array können eine Vielzahl von Funktionen ausgewertet werden, so z.B.

np.arange(4).sum() # 6
np.arange(4).mean() # 1.5
np.arange(4).std() # 1.118033988749895
np.arange(4).min() # 0
np.arange(4).max() # 3