Maison >développement back-end >Tutoriel Python >Comment accéder efficacement à un tableau à N dimensions avec un tableau à dimensions (N-1) ?
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>
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>
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>
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>
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!