Maison  >  Article  >  développement back-end  >  Comment accéder aux tableaux multidimensionnels avec des tableaux (n-1) dimensions ?

Comment accéder aux tableaux multidimensionnels avec des tableaux (n-1) dimensions ?

Susan Sarandon
Susan Sarandonoriginal
2024-10-21 10:05:02754parcourir

How to Access Multidimensional Arrays with (n-1)-Dimensional Arrays?

Accès aux tableaux multidimensionnels avec des tableaux (n-1) dimensions : un guide complet

Dans le domaine des tableaux multidimensionnels, surgit un alléchant défi : accéder à un tableau à n dimensions avec un tableau à (n-1) dimensions le long d'une dimension spécifique. Ce casse-tête a captivé de nombreux data scientists et programmeurs.

Le problème : disséquer un tableau multidimensionnel

Imaginez un tableau tridimensionnel, a, débordant de valeurs numériques distribuées sur ses trois axes. Supposons maintenant que nous ayons un désir inflexible d’extraire les maxima le long d’une dimension donnée, par exemple la première. Comment pourrions-nous y parvenir avec un tableau à (n-1) dimensions, idx, qui contient les indices des maxima le long de cette même dimension ?

Solution 1 : libérer la puissance de l'indexation avancée

En exploitant la puissance de l’indexation avancée, nous pouvons trouver une solution à notre dilemme. En tirant parti de la fonction de grille de numpy, nous pouvons générer habilement des coordonnées qui couvrent la forme de chaque dimension de a, à l'exception de la dimension que nous cherchons à indexer. Cette opération nous confère la possibilité d'accéder aux maxima de a comme s'ils étaient extraits via a.max(axis=0).

<code class="python">m, n = a.shape[1:]
I, J = np.ogrid[:m, :n]
a_max_values = a[idx, I, J]</code>

Solution 2 : Une approche générique pour les masses

Pour ceux qui recherchent une solution plus généralisée, nous introduisons argmax_to_max. Cette fonction ingénieuse nous permet de reproduire sans effort le comportement de arr.max(axis) à partir de argmax et arr. Son design élégant simplifie les tâches d'indexation grâce à ses machinations complexes.

<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>

Indexation d'un tableau multidimensionnel : dévoiler une subtilité

Au-delà de l'extraction de maxima, accéder à un tableau multidimensionnel avec un tableau à (n-1) dimensions présente un autre défi intrigant. En décomposant la forme du tableau en grilles (n-1) dimensions, all_idx facilite la récupération transparente des valeurs d'éléments spécifiées par les 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>

Armé de cet arsenal de techniques de manipulation d'index, vous possédez désormais les connaissances intellectuelles capital pour relever les défis liés à l'accès à des tableaux multidimensionnels avec des tableaux à (n-1) dimensions dans vos aventures de gestion des données. Puisse-t-il vous apporter triomphe et illumination !

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!

Déclaration:
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