Heim  >  Artikel  >  Backend-Entwicklung  >  Wie greife ich auf mehrdimensionale Arrays mit weniger Dimensionen zu?

Wie greife ich auf mehrdimensionale Arrays mit weniger Dimensionen zu?

Linda Hamilton
Linda HamiltonOriginal
2024-10-21 11:32:02832Durchsuche

How to Access Multidimensional Arrays with Fewer Dimensions?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn