Maison > développement back-end > Tutoriel Python > Comment accéder efficacement aux valeurs dans des tableaux multidimensionnels à l'aide de tableaux de dimension inférieure ?

Comment accéder efficacement aux valeurs dans des tableaux multidimensionnels à l'aide de tableaux de dimension inférieure ?

Barbara Streisand
Libérer: 2024-10-21 13:34:02
original
481 Les gens l'ont consulté

How to Access Values in Multidimensional Arrays Using Lower- Dimensional Arrays Effectively?

Accès à des tableaux multidimensionnels avec des tableaux de dimension inférieure

Dans des tableaux multidimensionnels, la récupération de valeurs selon une dimension spécifique à l'aide d'un tableau de dimensionnalité inférieure peut être stimulant. Prenons l'exemple ci-dessous :

<code class="python">a = np.random.random_sample((3,4,4))
b = np.random.random_sample((3,4,4))
idx = np.argmax(a, axis=0)</code>
Copier après la connexion

Comment pouvons-nous accéder aux maxima dans un idx utilisant comme si nous avions utilisé a.max(axis=0) ? Comment pouvons-nous récupérer les valeurs correspondantes de b ?

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

L'indexation avancée offre un moyen flexible d'y parvenir :

<code class="python">m, n = a.shape[1:]  # Extract dimensions excluding axis 0
I, J = np.ogrid[:m, :n]
a_max_values = a[idx, I, J]  # Index using the grid
b_max_values = b[idx, I, J]</code>
Copier après la connexion

Cette solution exploite le fait que la grille [idx, I, J] couvre toutes les combinaisons possibles d'indices pour les dimensions restantes.

Généralisation pour la dimensionnalité arbitraire

Pour un tableau général à n dimensions, une fonction peut être définie pour généraliser la solution ci-dessus :

<code class="python">def argmax_to_max(arr, argmax, axis):
    """
    Apply argmax() operation along one axis to retrieve maxima.

    Args:
        arr: Array to apply argmax to
        argmax: Resulting argmax array
        axis: Axis to apply argmax (0-based)
    Returns:
        Maximum values along specified axis
    """
    new_shape = list(arr.shape)
    del new_shape[axis]

    grid = np.ogrid[tuple(map(slice, new_shape))]  # Create grid of indices
    grid.insert(axis, argmax)

    return arr[tuple(grid)]</code>
Copier après la connexion

Méthode d'indexation alternative

Alternativement, une fonction peut être créée pour générer une grille d'indices pour tous les axes :

<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 grille peut ensuite être utilisée pour accéder à un tableau multidimensionnel avec un tableau de dimension inférieure :

<code class="python">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!

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