Je ne suis pas un expert, donc je dois utiliser le module timeit
pour vérifier la vitesse. J'utilise IPython (ce qui facilite le timing) mais même sans le module timeit
est probablement le chemin à parcourir.
In [21]: a = numpy.random.random((10**6, 3))
In [22]: timeit numpy.modf(a)[0]
10 loops, best of 3: 90.1 ms per loop
In [23]: timeit a-numpy.trunc(a)
10 loops, best of 3: 135 ms per loop
In [24]: timeit numpy.mod(a, 1.0)
10 loops, best of 3: 68.3 ms per loop
In [25]: timeit a % 1.0
10 loops, best of 3: 68.1 ms per loop
Les deux derniers sont équivalents. Je ne sais pas grand-chose sur l'utilisation de la mémoire, mais je serais surpris si modf(a)[0]
et a-numpy.trunc(a)
n'utilisaient pas plus de mémoire que de simplement prendre le mod directement.
[BTW, si votre code fait ce que vous voulez et que vous êtes seulement intéressé par les améliorations, vous pourriez être intéressé par the codereview stackexchange. Je ne sais toujours pas où se situe la ligne de démarcation, mais cela ressemble un peu plus à leur tasse de thé.]
Je n'ai pas pensé à% 1, je pense que c'est la solution la plus pratique parce qu'il utilise purement python salutations – Cobry
Je devrais espérer que les "experts" utilisent 'timeit' pour vérifier la vitesse aussi. Lorsque le caoutchouc rencontre la route, il est (généralement) impossible de dire comment quelque chose fonctionnera jusqu'à ce que vous le mesuriez réellement. – mgilson
Vous pouvez obtenir la meilleure performance si vous utilisez% = 1. au lieu d'utiliser un nouveau tableau pour stocker les valeurs, car il modifie le tableau en place – EnricoGiampieri