Stratégies efficaces de mappage de tableau Numpy
Lorsqu'il s'agit de mapper des fonctions sur un tableau Numpy, l'efficacité des performances est cruciale. Une question fondamentale se pose : « Quelle est l'approche la plus efficace pour les opérations de cartographie ? »
Approche inefficace : compréhension de liste Python
L'exemple fourni dans la question utilise une liste compréhension :
squares = np.array([squarer(xi) for xi in x])
Bien que cette approche fonctionne, elle présente des inefficacités inhérentes en raison de la conversion intermédiaire d'une liste Python vers une Tableau Numpy.
Stratégies optimisées
En testant diverses méthodes, les solutions optimales émergent :
1. Utilisez les fonctions Numpy intégrées :
Si la fonction que vous mappez est déjà vectorisée dans Numpy (par exemple, x^2), son utilisation directe offre des performances supérieures :
squares = x ** 2
2. Vectorisation avec numpy.vectorize :
Pour les fonctions personnalisées, la vectorisation avec numpy.vectorize montre des gains de vitesse significatifs :
f = lambda x: x ** 2 vf = np.vectorize(f) squares = vf(x)
3. numpy.fromiter :
Cette approche crée un itérateur à partir de la fonction et utilise numpy.fromiter pour construire efficacement un tableau Numpy :
squares = np.fromiter((squarer(xi) for xi in x), x.dtype)
4. numpy.array(list(map(...)):
Une autre alternative optimisée consiste à utiliser map puis à la convertir en un tableau Numpy :
squares = np.array(list(map(squarer, x)))
Benchmarks effectués l'utilisation de perfplot démontre que ces méthodes optimisées surpassent de loin l'approche originale de compréhension de liste.
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!