Maison >développement back-end >Tutoriel Python >Comment la fonction « meshgrid » de NumPy peut-elle générer efficacement toutes les combinaisons de valeurs de tableau ?

Comment la fonction « meshgrid » de NumPy peut-elle générer efficacement toutes les combinaisons de valeurs de tableau ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-21 01:24:09333parcourir

How Can NumPy's `meshgrid` Function Efficiently Generate All Combinations of Array Values?

Utiliser NumPy pour des combinaisons de tableaux efficaces

Pour étudier le comportement numérique d'une fonction à six paramètres, vous recherchez une méthode efficace pour parcourir son espace de paramètres. Initialement, vous avez utilisé une fonction personnalisée pour combiner les valeurs du tableau, suivie de réduire() pour l'appliquer à plusieurs reprises. Bien que fonctionnelle, cette approche s'est avérée lourde.

Solution efficace avec NumPy

Les versions plus récentes de NumPy (1.8.x et supérieures) offrent une solution bien supérieure : numpy.meshgrid(). Cette fonction permet de créer des tableaux multidimensionnels comprenant toutes les combinaisons possibles de tableaux d'entrée. Dans votre cas :

import numpy as np

a = np.arange(0, 1, 0.1)
combinations = np.array(np.meshgrid(a, a, a, a, a, a)).T.reshape(-1, 6)

Cette approche améliore considérablement les performances, comme le démontre le benchmark suivant :

%timeit np.array(np.meshgrid(a, a, a, a, a, a)).T.reshape(-1, 6)

# Output: 10000 loops, best of 3: 74.1 µs per loop

Vous pouvez également utiliser la fonction personnalisée suivante pour un contrôle maximal :

def cartesian(arrays):
    arr = np.empty((len(arrays.shape), len(arrays)))
    for n, array in enumerate(arrays):
        arr[n, :] = array
    return arr.T.reshape(-1, len(arrays))

%timeit cartesian([a, a, a, a, a, a])

# Output: 1000 loops, best of 3: 135 µs per loop

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