73 votes

Équivalence en Python des fonctions ou macros en ligne

Je viens de réaliser que faire

x.real*x.real+x.imag*x.imag

est trois fois plus rapide que de faire

abs(x)**2

où x est un tableau numpy de nombres complexes. Pour la lisibilité du code, je pourrais définir une fonction telle que

def abs2(x):
    return x.real*x.real+x.imag*x.imag

ce qui est toujours beaucoup plus rapide que abs(x)**2, mais au prix d'un appel de fonction. Est-il possible de mettre en ligne une telle fonction, comme je le ferais en C en utilisant une macro ou le mot-clé inline ?

14 votes

Si vous avez besoin de ce genre d'optimisations, vous devez probablement utiliser quelque chose comme Cython.

8 votes

PyPy à la rescousse !

12 votes

Si vous vous souciez de ces petites optimisations, vous devriez utiliser le C, pas Python. Python n'a rien à voir avec la vitesse, vraiment.

3voto

Linfeng Mu Points 101

Vous pouvez essayer d'utiliser lambda :

abs2 = lambda x : x.real*x.real+x.imag*x.imag

puis l'appeler par :

y = abs2(x)

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