Problem:
Bestimmen Sie bei einem gegebenen Array X die Zeilenindizes der angegebenen Werte, die in searched_values gespeichert sind. Im folgenden Beispiel suchen wir beispielsweise nach den Indizes für Werte [4, 2], [3, 3] und [5, 6] innerhalb des Arrays X.
X = np.array([[4, 2], [9, 3], [8, 5], [3, 3], [5, 6]]) searched_values = np.array([[4, 2], [3, 3], [5, 6]])
Die gewünschte Ausgabe wäre:
[0, 3, 4]
Lösungen:
Ansatz 1: NumPy Broadcasting
ist eine Möglichkeit, np.where zu nutzen und die Broadcasting-Funktionen sind wie folgt.
np.where((X == searched_values[:, None]).all(-1))[1]
Ansatz 2: Speichereffiziente lineare Indexkonvertierung
So konvertieren Sie jede Zeile mit NumPys np.ravel_multi_index in einen eindeutigen linearen Index. Es gibt.
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 3: Speichereffiziente und optimierte lineare Indexkonvertierung
NumPys np.searchsorted kann auch verwendet werden, um lineare Indizes schnell zu finden.
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)]
So funktioniert np.ravel_multi_index:
np.ravel_multi_index erstellt eine lineare Indexdarstellung eines mehrdimensionalen Index. Interpretieren Sie jede Zeile als Index in einem n-dimensionalen mehrdimensionalen Array und generieren Sie den entsprechenden linearen Index.
Beispiel: Anwenden von np.ravel_multi_index(X.T, dims) auf ein Beispielarray X:
np.ravel_multi_index(X.T, dims) # Output: array([30, 66, 61, 24, 41])
Dies stellt den linearen Index dar, den jede Zeile des Arrays X hat. Dieser lineare Index kann verwendet werden, um jede Zeile im Array eindeutig zu identifizieren.
Der Beispielcode für jede Methode ist unten aufgeführt.
# Approach 1 print(np.where((X == searched_values[:, None]).all(-1))[1]) # Approach 2 dims = X.max(0) + 1 print(np.where(np.in1d(np.ravel_multi_index(X.T, dims), np.ravel_multi_index(searched_values.T, dims)))[0]) # Approach 3 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() print(sidx[np.searchsorted(X1D, searched_valuesID, sorter=sidx)])
Mit beiden Ansätzen können Sie den Zeilenindex eines bestimmten Werts in Array X leicht ermitteln.
Das obige ist der detaillierte Inhalt vonWie finde ich effizient Zeilenindizes bestimmter Werte in einem NumPy-Array?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!