Wie finde ich die Zeilenindizes mehrerer Werte in einem NumPy-Array?
NumPy bietet mehrere Ansätze, um die Zeilenindizes bestimmter Werte in einem NumPy-Array zu finden:
Ansatz Nr. 1: NumPy Rundfunk
result = np.where((X==searched_values[:,None]).all(-1))[1]
Ansatz Nr. 2: Speichereffizienter Ansatz mit np.ravel_multi_index
dims = X.max(0) + 1 out = np.where(np.in1d(np.ravel_multi_index(X.T,dims),\ np.ravel_multi_index(searched_values.T,dims)))[0]
Ansatz Nr. 3: Speichereffizient Annäherung mit np.searchsorted
dims = X.max(0) + 1 X1D = np.ravel_multi_index(X.T,dims) searched_valuesID = np.ravel_multi_index(searched_values.T,dims) sidx = X1D.argsort() out = sidx[np.searchsorted(X1D,searched_valuesID,sorter=sidx)]
Np.ravel_multi_index verstehen
np.ravel_multi_index wandelt mehrdimensionale Indizierungstupel in lineare Indizes für ein Raster um. Es geht davon aus, dass jede Spalte eine Dimension darstellt, und verwendet die Gitterform, um lineare Indizes zu berechnen.
Zum Beispiel mit X:
X = np.array([[4, 2], [9, 3]])
und dims = [10, 7], die erste Zeile von X (4, 2) wird in den linearen Index 30 umgewandelt. Dies entspricht Zeile 4 und Spalte 2 auf der Raster:
dims = X.max(0) + 1 # [10, 7] np.ravel_multi_index(X.T, dims) # [30, 66]
Abmessungen für eindeutige lineare Indizes auswählen
Um eindeutige lineare Indizes sicherzustellen, sollten die Abmessungen des Rasters auf die maximale Ausdehnung jeder Achse des Rasters eingestellt werden Eingabearray X. Dies kann erreicht werden, indem 1 zum Maximalwert jeder Spalte in X hinzugefügt wird.
Das obige ist der detaillierte Inhalt vonWie finde ich effizient Zeilenindizes mit mehreren Werten in einem NumPy-Array?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!