web-dev-qa-db-fra.com

IPython% timeit qu'est-ce que la boucle et l'itération dans les options?

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?

14
bner341

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 :-)

12
MSeifert
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)

6
alfasin