Comme l'a dit Fabian, il est difficile d'être plus rapide que math.sqrt
. La raison en est qu'il appelle la fonction correspondante de la bibliothèque C, avec CPython.
Cependant, vous pouvez accélérer les choses en supprimant les frais généraux de recherche d'attribut:
from math import sqrt
Chaque appel ultérieur à sqrt sera pas doivent le chercher dans le module de calcul, ce qui fait gagner du temps d'exécution:
print sqrt(2)
Voici chronométrons nombre, du plus rapide au plus lent (Python 2.6.5, Mac OS X 10.6.3): sqrt
est plus rapide que **0.5
:
[email protected] ~ % python -m timeit -s 'from math import sqrt; x = 2' 'sqrt(x)'
1000000 loops, best of 3: 0.207 usec per loop
[email protected] ~ % python -m timeit -s 'x = 2' 'x**0.5'
1000000 loops, best of 3: 0.226 usec per loop
[email protected] ~ % python -m timeit -s 'import math; x = 2' 'math.sqrt(x)'
1000000 loops, best of 3: 0.268 usec per loop
Notez que les tests de synchronisation calculer la racine carrée d'une variable . Ils ne calculent pas une constante comme 2**0.5
, parce que 2**0.5
est pré -calculated, en CPython:
import dis
def f():
return 2**0.5
print dis.dis(f)
impressions
2 0 LOAD_CONST 3 (1.4142135623730951)
3 RETURN_VALUE
où vous voyez le sqrt flottant constant (2) = 1,414 ...
Si vous manipulez des tableaux de nombres, le sqrt
de NumPy est le chemin à suivre, comme mentionné dans une autre réponse.
sqrt() s sont juste lents. Avez-vous vraiment besoin de trouver 20k racines distinctes, ou pouvez-vous utiliser une table de recherche ou des résultats de cache? –