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
Libérer: 2024-12-21 01:24:09
original
281 Les gens l'ont consulté

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

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

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