Je me pose des questions sur la commande %timeit
Dans IPython
De la docs :
%timeit [-n<N> -r<R> [-t|-c] -q -p<P> -o] setup_code
Options:
-n: exécute les temps d'instruction donnés dans une boucle. Si cette valeur n'est pas donnée, une valeur d'ajustement est choisie.
-r: répète les temps d'itération de la boucle et obtient le meilleur résultat. Par défaut: 3
Par exemple, si j'écris:
%timeit -n 250 -r 2 [i+1 for i in range(5000)]
Donc, -n 250
Exécute [i+1 for i in range(5000)]
250 fois? Alors qu'est-ce que -r 2
?
Il spécifie le nombre de répétitions, le nombre de répétitions est utilisé pour déterminer la moyenne. Par exemple:
%timeit -n 250 a = 2
# 61.9 ns ± 1.01 ns per loop (mean ± std. dev. of 7 runs, 250 loops each)
%timeit -n 250 -r 2 a = 2
# 62.6 ns ± 0 ns per loop (mean ± std. dev. of 2 runs, 250 loops each)
Le nombre d'exécutions sera n * r
mais la statistique est basée sur le nombre de repeats
(r
) mais le nombre de "boucles" pour chaque répétition est déterminé sur la base de number
(n
).
Fondamentalement, vous avez besoin d'un n
suffisamment grand pour que le minimum du nombre de boucles soit précis "assez" pour représenter le temps d'exécution le plus rapide possible, mais vous avez également besoin d'un r
suffisamment grand pour être précis " statistiques "sur la fiabilité de cette mesure" du temps d'exécution le plus rapide possible "(surtout si vous pensez qu'une mise en cache pourrait se produire).
Pour les synchronisations superficielles, vous devez toujours utiliser un r
de 3
, 5
ou 7
(dans la plupart des cas, c'est assez grand) et choisissez n
aussi haut que possible - mais pas trop haut, vous voudrez probablement qu'il se termine dans un délai raisonnable :-)
timeit -n 250 <statement>
L'instruction sera exécutée 3 * 250 = 750 fois (-r
a une valeur par défaut de 3)
timeit -n 250 -r 4 <statement>
L'instruction sera exécutée 4 * 250 = 1000 fois
-r
- combien de fois répéter la minuterie (dans les exemples ci-dessus, chaque fois que la minuterie est appelée avec -n 250 ce qui signifie 250 exécutions)