Einführung in das Indexieren in NumPy

NumPyNumPyBeginner
Jetzt üben

This tutorial is from open-source community. Access the source code

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

In diesem Lab werden wir die Grundlagen des Indexierens in NumPy erkunden. Indexieren ermöglicht es uns, bestimmte Elemente oder Teilmengen von Elementen in einem Array zuzugreifen und zu manipulieren. Das Verständnis, wie man effektiv indexiert, ist entscheidend für die Arbeit mit Arrays in NumPy.

Hinweis: Sie können im 02-indexing-on-ndarrays.ipynb Code schreiben. Einige Druckoperationen werden in den Schritten weggelassen, und Sie können die Ausgabe nach Bedarf drucken.

Importieren von NumPy

Zunächst importieren wir die NumPy-Bibliothek, damit wir ihre Funktionen und Datentypen verwenden können.

import numpy as np

Grundlegendes Indexieren

NumPy-Arrays können mit der standardmäßigen Python-Syntax x[obj] indiziert werden, wobei x das Array und obj die Auswahl ist. Es gibt verschiedene Arten des Indexierens, je nachdem, welchen Typ obj hat.

Einzelnes Element-Indexieren

Das Einzelnelement-Indexieren funktioniert genauso wie das Indexieren für andere standardmäßige Python-Sequenzen. Es basiert auf 0 und akzeptiert negative Indizes für das Indexieren von Ende des Arrays aus.

x = np.arange(10)
print(x[2])  ## Ausgabe: 2
print(x[-2])  ## Ausgabe: 8

Mehrdimensionales Indexieren

Arrays können mehrere Dimensionen haben, und das Indexieren funktioniert für jede Dimension auf die gleiche Weise. Sie können Elemente in einem mehrdimensionalen Array erreichen, indem Sie die Indizes jeder Dimension durch ein Komma trennen.

x = np.arange(10).reshape(2, 5)
print(x[1, 3])  ## Ausgabe: 8
print(x[1, -1])  ## Ausgabe: 9

Indexieren von Unterdimensionen-Arrays

Wenn Sie ein mehrdimensionales Array mit weniger Indizes als Dimensionen indizieren, erhalten Sie ein Unterdimensionen-Array. Jeder angegebene Index wählt das Array aus, das den restlichen Dimensionen entspricht, die ausgewählt wurden.

x = np.arange(10).reshape(2, 5)
print(x[0])  ## Ausgabe: [0, 1, 2, 3, 4]

Slicing und Schrittweite

Das grundlegende Slicing in NumPy erweitert das Slicing-Konzept von Python auf N Dimensionen. Es ermöglicht es Ihnen, einen Bereich von Elementen entlang jeder Dimension eines Arrays auszuwählen.

Grundlegendes Slicing

Das grundlegende Slicing tritt auf, wenn obj ein Slice-Objekt ist (konstruiert durch die start:stop:step-Notation innerhalb von eckigen Klammern), eine Ganzzahl oder ein Tupel aus Slice-Objekten und Ganzzahlen.

x = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
print(x[1:7:2])  ## Ausgabe: [1, 3, 5]

Negative Indizes

Negative Indizes können verwendet werden, um von Ende des Arrays aus zu indexieren. Beispielsweise bezieht sich -1 auf das letzte Element, -2 auf das vorletzte Element usw.

x = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
print(x[-2:10])  ## Ausgabe: [8, 9]
print(x[-3:3:-1])  ## Ausgabe: [7, 6, 5, 4]

Standardwerte für Slicing

Wenn der Startindex nicht angegeben ist, wird er standardmäßig auf 0 für positive Schrittwerte und auf -n-1 für negative Schrittwerte gesetzt. Wenn der Stopindex nicht angegeben ist, wird er standardmäßig auf n für positive Schrittwerte und auf -n-1 für negative Schrittwerte gesetzt. Wenn der Schritt nicht angegeben ist, wird er standardmäßig auf 1 gesetzt.

x = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
print(x[5:])  ## Ausgabe: [5, 6, 7, 8, 9]

Fortgeschrittenes Indexieren

Fortgeschrittenes Indexieren tritt ein, wenn das Auswahlobjekt obj ein nicht-Tupel-Sequenzenobjekt, ein ndarray (vom Datentyp Integer oder Bool) oder ein Tupel mit mindestens einem Sequenzenobjekt oder ndarray (vom Datentyp Integer oder Bool) ist. Es gibt zwei Arten von fortgeschrittenem Indexieren: Integer- und Boolean-Indexieren.

Integer-Array-Indexieren

Integer-Array-Indexieren ermöglicht die Auswahl beliebiger Elemente im Array basierend auf ihrem N-dimensionalen Index. Jedes Integer-Array repräsentiert eine Anzahl von Indizes in diese Dimension.

x = np.arange(10, 1, -1)
print(x[np.array([3, 3, 1, 8])])  ## Ausgabe: [7, 7, 9, 2]
print(x[np.array([3, 3, -3, 8])])  ## Ausgabe: [7, 7, 4, 2]

Boolean-Array-Indexieren

Boolean-Array-Indexieren ermöglicht die Auswahl von Array-Elementen basierend auf einer booleschen Bedingung. Das Ergebnis ist ein neues Array, das nur die Elemente enthält, die den True-Werten des booleschen Arrays entsprechen.

x = np.array([1., -1., -2., 3])
x[x < 0] += 20
print(x)  ## Ausgabe: [ 1., 19., 18., 3.]

Zugang zu Feldern

Wenn das ndarray-Objekt ein strukturiertes Array ist, können die Felder des Arrays durch Indexieren des Arrays mit Strings, ähnlich einem Dictionary, zugegriffen werden.

x = np.array([(1, 2), (3, 4), (5, 6)], dtype=[('a', np.int32), ('b', np.int32)])
print(x['a'])  ## Ausgabe: [1, 3, 5]

Indexierung mit flachem Iterator

Das Attribut x.flat gibt einen Iterator zurück, der verwendet werden kann, um das gesamte Array in C-stetiger Weise zu iterieren. Mit diesem Iterator kann auch mit dem grundlegenden Slicing oder dem fortgeschrittenen Indexieren indiziert werden.

x = np.arange(10)
iterator = x.flat
print(iterator[1:5])  ## Ausgabe: [1, 2, 3, 4]

Zuweisen von Werten an indizierte Arrays

Sie können mit Hilfe von Indexierung Werten an bestimmte Elemente oder Elemente einer Teilmenge in einem Array zuweisen. Der zuzuweisende Wert muss in der Form mit dem indizierten Array übereinstimmen.

x = np.arange(10)
x[2:7] = 1
print(x)  ## Ausgabe: [0, 1, 1, 1, 1, 1, 7, 8, 9]

x = np.arange(10)
x[2:7] = np.arange(5)
print(x)  ## Ausgabe: [0, 1, 0, 1, 2, 3, 7, 8, 9]

Zusammenfassung

In diesem Lab haben wir die Grundlagen des Indexierens in NumPy untersucht. Wir haben gelernt, wie man grundlegendes Indexieren, Slicing, fortgeschrittenes Indexieren, Zugang zu Feldern, Indexierung mit flachem Iterator und Zuweisen von Werten an indizierte Arrays verwendet. Ein Verständnis dieser Indexierungstechniken ist unerlässlich, um mit Arrays in NumPy effektiv umzugehen.