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