„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Wie extrahiere ich Elemente aus einem Array basierend auf Indizes in einem anderen Array mithilfe der Integer-Array-Indizierung?

Wie extrahiere ich Elemente aus einem Array basierend auf Indizes in einem anderen Array mithilfe der Integer-Array-Indizierung?

Veröffentlicht am 08.11.2024
Durchsuche:633

How to Extract Elements from an Array Based on Indices in Another Array Using Integer Array Indexing?

Verwenden der Integer-Array-Indizierung zum Extrahieren von Elementen basierend auf sekundären Array-Indizes

In dem gegebenen Szenario besteht das Ziel darin, bestimmte Elemente aus einem abzurufen Array A mithilfe von Indizes, die in einem zweiten Array B angegeben sind. Anstatt sich auf np.take oder np.choose zu verlassen, besteht ein einfacherer Ansatz darin, die Integer-Array-Indizierung von NumPy zu verwenden:

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

So erzielt dieser Code das gewünschte Ergebnis:

  • np.arange(A.shape[0]) erstellt ein Array von Indizes von 0 bis (A.shape[0] - 1), die die Zeilen von A darstellen.
  • B.ravel() glättet B in ein eindimensionales Array und stellt so sicher, dass es die gleiche Anzahl von Elementen hat als Zeilen in A.
  • Die Indexierungsoperation A[...] ruft Elemente von A unter Verwendung der Zeilenindizes und Spaltenindizes von B ab.

Dieser Ansatz ist besonders nützlich, wenn B ist ein 1D-Array oder eine Liste von Spaltenindizes. Durch das Überspringen der Reduzierungsoperation wird der Code noch einfacher:

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

Beispiel:

A = np.array([[0, 1], [2, 3], [4, 5]])
B = np.array([1, 0, 1])

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

print(result)
# Output: [1, 2, 5]
Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3