Heim  >  Artikel  >  Backend-Entwicklung  >  Wie extrahiere ich Elemente aus einem 2D-NumPy-Array mithilfe von Indizes aus einem anderen Array?

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

Linda Hamilton
Linda HamiltonOriginal
2024-11-10 02:31:02658Durchsuche

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

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]])

Lösungen:

1. Rein ganzzahlige Array-Indizierung:

A[np.arange(A.shape[0]), B.ravel()]

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)

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())

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())]

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)]

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!

Stellungnahme:
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