Indizieren eines Arrays nach einem anderen in Numpy
Betrachten Sie zwei Matrizen, A und B , wobei A beliebige Werte enthält und B Indizes von Elementen in A enthält. Die Aufgabe besteht darin, Elemente aus A basierend auf den durch B angegebenen Indizes zu extrahieren. Diese Indizierung ermöglicht das selektive Abrufen von Elementen.
Lösung mit erweiterter Indizierung:
Die erweiterte Indizierung von Numpy ermöglicht diesen Vorgang mithilfe des Ausdrucks:
A[np.arange(A.shape[0])[:,None], B]
Dieser Ansatz verwendet eine Kombination aus Zeilenindizes und Spaltenindizes, die von B abgerufen wurden, um Elemente in A abzurufen.
Lösung mit linearer Indizierung:
Ein alternativer Ansatz beinhaltet die lineare Indizierung:
m, n = A.shape out = np.take(A, B + n*np.arange(m)[:,None])
Hier repräsentieren m und n die Dimensionen von A, und die Operationen innerhalb der Funktion np.take() stellen die korrekte Indizierung von Elementen basierend auf B sicher.
Beispiel:
Lassen Sie uns diese Lösungen anhand eines Beispiels veranschaulichen:
import numpy as np A = np.array([[2, 4, 5, 3], [1, 6, 8, 9], [8, 7, 0, 2]]) B = np.array([[0, 0, 1, 2], [0, 3, 2, 1], [3, 2, 1, 0]]) # Advanced indexing result1 = A[np.arange(A.shape[0])[:,None], B] # Linear indexing m, n = A.shape result2 = np.take(A, B + n*np.arange(m)[:,None]) print("Result using advanced indexing:") print(result1) print("Result using linear indexing:") print(result2)
Ausgabe:
Result using advanced indexing: [[2 2 4 5] [1 9 8 6] [2 0 7 8]] Result using linear indexing: [[2 2 4 5] [1 9 8 6] [2 0 7 8]]
Das obige ist der detaillierte Inhalt vonWie indiziert man ein Numpy-Array durch ein anderes?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!