Comment accéder efficacement à un tableau à N dimensions avec un tableau à dimensions (N-1) ?

Susan Sarandon
Libérer: 2024-10-21 11:57:03
original
136 Les gens l'ont consulté

How to Access N-Dimensional Array with (N-1)-Dimensional Array Efficiently?

Accéder à un tableau à N dimensions avec un tableau à (N-1) dimensions

Étant donné un tableau à N dimensions a et un (N- Tableau 1)-dimensionnel idx, une tâche courante consiste à accéder aux éléments dans un spécifié par les indices dans idx. Cela peut être utile pour effectuer des opérations telles que trouver des maxima ou récupérer des valeurs spécifiques.

Solution élégante utilisant l'indexation avancée

Une solution élégante implique l'utilisation de l'indexation avancée avec la fonction ogrid de NumPy. :

<code class="python">m, n = a.shape[1:]
I, J = np.ogrid[:m, :n]
a_max_values = a[idx, I, J]
b_max_values = b[idx, I, J]</code>
Copier après la connexion

Cela crée une grille de maillage d'indices et l'utilise pour indexer dans a et b, ce qui donne des tableaux contenant les valeurs correspondantes.

Cas général avec fonction

Pour une solution plus générale qui fonctionne pour n'importe quel axe spécifié, nous pouvons définir une fonction :

<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>
Copier après la connexion

Cette fonction prend un tableau, son argmax le long d'un axe spécifié et l'axe lui-même . Il construit ensuite une grille de maillage et l'utilise pour extraire les éléments correspondants.

Indexation simplifiée avec fonction personnalisée

Pour simplifier davantage le processus d'indexation, nous pouvons créer une fonction d'assistance qui génère une grille d'indices :

<code class="python">def all_idx(idx, axis):
    grid = np.ogrid[tuple(map(slice, idx.shape))]
    grid.insert(axis, idx)
    return tuple(grid)</code>
Copier après la connexion

Cette fonction renvoie un tuple d'indices qui peut être utilisé directement pour indexer dans des tableaux d'entrée :

<code class="python">axis = 0
a_max_values = a[all_idx(idx, axis=axis)]
b_max_values = b[all_idx(idx, axis=axis)]</code>
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!