Zugriff auf mehrdimensionale Arrays mit weniger Dimensionen
Betrachten Sie ein n-dimensionales Array wie a und ein (n-1)-dimensionales Array, idx. Um mithilfe von idx entlang einer bestimmten Dimension auf a zuzugreifen, können wir eine erweiterte Indizierung verwenden.
Für ein dreidimensionales Array a können wir die Maximalwerte entlang der ersten Dimension mithilfe von idx wie folgt berechnen:
<code class="python">m, n = a.shape[1:] I, J = np.ogrid[:m, :n] a_max_values = a[idx, I, J]</code>
Dieser Ansatz kann für Arrays mit einer beliebigen Anzahl von Dimensionen verallgemeinert werden:
<code class="python">def argmax_to_max(arr, argmax, axis): new_shape = list(arr.shape) del new_shape[axis] grid = np.ogrid[tuple(map(slice, new_shape))] grid.insert(axis, argmax) return arr[tuple(grid)]</code>
Um ein n-dimensionales Array mit einem (n-1)-dimensionalen Array zu indizieren, können wir ein Gitter aus erstellen Indizes für alle Achsen:
<code class="python">def all_idx(idx, axis): grid = np.ogrid[tuple(map(slice, idx.shape))] grid.insert(axis, idx) return tuple(grid)</code>
Mit diesem Raster können wir in die Eingabearrays indizieren:
<code class="python">a_max_values = a[all_idx(idx, axis=axis)] b_max_values = b[all_idx(idx, axis=axis)]</code>
Dieser Ansatz bietet eine elegante Lösung für den Zugriff auf mehrdimensionale Arrays mit weniger Dimensionen.
Das obige ist der detaillierte Inhalt vonWie greife ich auf mehrdimensionale Arrays mit weniger Dimensionen zu?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!