Wie extrahiere ich Elemente aus einem 2D-NumPy-Array mithilfe von Indizes aus einem anderen Array?

Linda Hamilton
Freigeben: 2024-11-10 02:31:02
Original
662 Leute haben es durchsucht

How to Extract Elements from a 2D NumPy Array Using Indices from Another Array?

Elemente aus einem 2D-Array mithilfe von Indizes aus einem anderen Array extrahieren

In NumPy ist es manchmal notwendig, bestimmte Elemente aus einem mehrdimensionalen Array zu extrahieren basierend auf Indizes, die in einem anderen Array gespeichert sind. Dieses Szenario tritt häufig auf, wenn mit Datenstrukturen wie dünn besetzten Matrizen oder indizierten Auswahlen gearbeitet wird.

Problem:

Betrachten Sie zwei NumPy-Arrays:

A = np.array([[0, 1], [2, 3], [4, 5]])
B = np.array([[1], [0], [1]])  # Index array
Nach dem Login kopieren

Das Ziel besteht darin, ein Element aus jeder Zeile von A zu extrahieren, wobei das spezifische Element durch den Index in der entsprechenden Zeile von B angegeben wird. Die erwartete Ausgabe sollte sein:

C = np.array([[1], [2], [5]])
Nach dem Login kopieren

Lösungen:

1. Rein ganzzahlige Array-Indizierung:

A[np.arange(A.shape[0]), B.ravel()]
Nach dem Login kopieren

Diese Methode beinhaltet die Verwendung der Integer-Array-Indizierungsfunktionen von NumPy. Es generiert einen Bereich von Indizes, der den Zeilen von A entspricht, und kombiniert ihn mit dem abgeflachten B-Array, um die entsprechenden Elemente auszuwählen.

2. Transponieren und np.choose:

np.choose(B.ravel(), A.T)
Nach dem Login kopieren

Bei diesem alternativen Ansatz transponieren Sie A, um es an die Form von B anzupassen, und verwenden dann np.choose, um die gewünschten Elemente basierend auf dem abgeflachten B-Array auszuwählen.

3. Iterierbares Entpacken (Python >=3.6):

*A = A.T
C = np.array([*zip(*A)][i] for i in B.ravel())
Nach dem Login kopieren

Diese Methode verwendet iterierbares Entpacken, um A in eine Liste von Zeilen umzuwandeln, und iteriert dann über die Zeilen von A basierend auf den Indizes in B bis Extrahieren Sie die gewünschten Elemente.

4. Listenverständnisse und Broadcasting:

[A[i][j] for i, j in zip(range(A.shape[0]), B.ravel())]
Nach dem Login kopieren

Listenverständnisse können verwendet werden, um ein neues Array zu erstellen, indem über die Elemente von A und B iteriert und die elementweise Auswahl durchgeführt wird.

5. Fancy Indexing (NumPy >=1,18):

A[np.stack([range(A.shape[0]), B.ravel()], axis=1)]
Nach dem Login kopieren

Fancy Indexing ermöglicht effizientere und kompaktere Indizierungsvorgänge. In diesem Fall wird ein 2D-Array mit den Zeilenindizes und B-Indizes erstellt, mit dem die gewünschten Elemente aus A ausgewählt werden können.

Die am besten geeignete Lösung hängt von den spezifischen Anforderungen und Einschränkungen der Aufgabe ab. wie Effizienz, Lesbarkeit und Kompatibilität mit älteren Versionen von NumPy.

Das obige ist der detaillierte Inhalt vonWie extrahiere ich Elemente aus einem 2D-NumPy-Array mithilfe von Indizes aus einem anderen Array?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage