21 votes

numexpr.evaluate("a+b",out=a)

Est-il sûr en python numexpr d'assigner des valeurs au même tableau que celui sur lequel on opère pour éviter de créer un tableau temporaire ?

D'après la description de l'utilisation de la mémoire sur le site page d'accueil du projet cela semble correct, mais sans plonger dans le code source, ce n'est pas une réponse solide.

J'ai essayé ce qui suit et qui fonctionne bien, mais j'espère avoir la confirmation de quelqu'un qui connaît mieux ce paquet :

import numpy as np
import numexpr as ne
a = np.ones(5)
b = a.copy()
ne.evaluate("a+b",out=a)
array([ 2.,  2.,  2.,  2.,  2.])

8voto

Gunther Points 41

Cela fonctionne, car numexpr utilise toujours des tableaux temporaires en interne, bien que la taille des morceaux soit de 1024 éléments (ou 4096 si l'on utilise VML). Vous pouvez considérer ces morceaux d'entrées comme des tranches, bien qu'ils soient stockés en tant que types de données C appropriés pour des raisons de rapidité et de compacité de la mémoire lors de l'évaluation. Les résultats seront stockés dans le paramètre out après que le calcul de chaque morceau a été effectué, sinon il doit allouer un tableau de la même taille que les entrées.

Consulter la section Pourquoi ça marche pour le pseudocode de la façon dont numexpr évalue l'arithmétique vectorisée.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X