ndarray – ein N-dimensionales Array-Objekt

ndarray erlaubt mathematische Operationen auf ganzen Datenblöcken und verwendet dabei eine ähnliche Syntax wie bei ähnlichen Operationen zwischen skalaren Elementen. In NumPy gibt viele verschiedene Typen zur Beschreibung von Skalaren, die größtenteils auf Typen aus der Sprache C basieren und denjenigen, die mit Python kompatibel sind.

Siehe auch:

Bemerkung:

Wann immer in diesem Tutorial von Array, NumPy-Array oder ndarray geredet wird, bezieht sich dies in den meisten Fällen auf das ndarray-Objekt.

[1]:
import numpy as np
[2]:
py_list = [2020, 2021, 20222]
array_1d = np.array(py_list)
[3]:
array_1d
[3]:
array([ 2020,  2021, 20222])

Verschachtelte Sequenzen, wie eine Liste von Listen gleicher Länge, können in ein mehrdimensionales Array umgewandelt werden:

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

Da list_of_lists eine Liste mit drei Listen war, hat das NumPy-Array array_2d zwei Dimensionen, deren Form aus den Daten abgeleitet wird. Mit den Attributen ndim und shape können wir uns die Anzahl der Dimensionen und den Umriss von array_2d ausgeben lassen:

[6]:
array_2d.ndim
[6]:
2
[7]:
array_2d.shape
[7]:
(3, 4)

Um euch einen Eindruck von der Syntax zu vermitteln, erstelle ich zunächst ein Array aus Zufallszahlen mit fünf Spalten und sieben Slices (engl.: Scheiben):

[8]:
data = np.random.randn(7, 3)

ndarray ist ein generischer mehrdimensionaler Container. Jedes Array hat eine Form, ein Tupel, das die Größe der einzelnen Dimensionen angibt. Mit shape kann ich mir die Anzahl der Zeilen und Spalten eines Arrays ausgeben lassen:

Zusätzlich zu np.array gibt es eine Reihe weiterer Funktionen zur Erstellung neuer Arrays. zeros und ones erzeugen beispielsweise Arrays aus Nullen bzw. Einsen mit einer bestimmten Länge oder Form. empty erzeugt ein Array, ohne dessen Werte auf einen bestimmten Wert zu initialisieren. Um ein höherdimensionales Array mit diesen Methoden zu erstellen, übergebt ein Tupel für die Form:

[9]:
np.zeros(4)
[9]:
array([0., 0., 0., 0.])
[10]:
np.ones((3,4))
[10]:
array([[1., 1., 1., 1.],
       [1., 1., 1., 1.],
       [1., 1., 1., 1.]])
[11]:
np.empty((2,3,4))
[11]:
array([[[0., 0., 0., 0.],
        [0., 0., 0., 0.],
        [0., 0., 0., 0.]],

       [[0., 0., 0., 0.],
        [0., 0., 0., 0.],
        [0., 0., 0., 0.]]])

Bemerkung:

Ihr dürft nich sicher annehmen, dass die die Funktion np.empty ein Array mit lauter Nullen zurückgibt, da sie uninitialisierten Speicher zurückgibt und kann daher auch garbage-Werte enthalten kann.

arange ist eine array-bewertete Version der Built-in Python range-Funktion:

[12]:
np.arange(4)
[12]:
array([0, 1, 2, 3])

Weitere NumPy-Standardfunktionen zur Erstellung von Arrays sind:

Funktion

Beschreibung

array

konvertiert Eingabedaten (Liste, Tupel, Array oder andere Sequenztypen) in ein ndarray, indem entweder ein dtype abgeleitet oder explizit ein dtype angegeben wird; kopiert standardmäßig die Eingabedaten in das Array

asarray

konvertiert die Eingabe in ein ndarray, kopiert aber nicht, wenn die Eingabe bereits ein ndarray ist

arange

wie Python built-in range, gibt aber ein ndarray statt einer Liste zurück

ones, ones_like

ones erzeugt ein Array mit 1en in der gegebenen Form und dem gegebenen dtype; ones_like nimmt ein anderes Array und erzeugt ein ones-Array in der gleichen Form und dem gleichen dtype

zeros, zeros_like

wie ones und ones_like, erzeugt aber stattdessen Arrays mit 0en

empty, empty_like

erzeugt neue Arrays durch Zuweisung neuen Speichers, füllt sie aber nicht mit Werten wie ones und zeros

full, full_like

erzeugt ein Array der angegebenen shape und des angegebenen dtype, wobei alle Werte auf den angegebenen Füllwert gesetzt werden; full_like nimmt ein anderes Array und erzeugt ein gefülltes Array mit denselben shape und dtype

eye, identity

erzeugt eine quadratische N × N-Identitätsmatrix (1en auf der Diagonale und 0en anderswo)