Die Magie %timeit
Befehl bietet eine -o
Option:
-o: ein TimeitResult zurück, die in einer Variablen gespeichert werden kann, um das Ergebnis in mehr Details zu überprüfen.
Es wird weiterhin das Ergebnis drucken, aber auch das Ergebnis zurückgeben, so dass es in einer Variablen erfasst werden kann. Die Syntax für magische Befehle ist ein wenig begrenzt, aber Sie unterschiedliche Ergebnisse in einem list
, indem sie einer Variablen zugewiesen wird und Anhängen dieser Variablen zu einer Liste sammeln konnte:
print(res)
# [<TimeitResult : 10000000 loops, best of 3: 61.2 ns per loop>,
# <TimeitResult : 10000000 loops, best of 3: 61.3 ns per loop>,
# <TimeitResult : 10000000 loops, best of 3: 61.5 ns per loop>]
:
res = []
for i in range(3):
a = %timeit -o 10*10
res.append(a)
# 10000000 loops, best of 3: 61 ns per loop
# 10000000 loops, best of 3: 61.1 ns per loop
# 10000000 loops, best of 3: 60.8 ns per loop
und dann res
zugreifen
Jede dieser Ergebnisse hat mehrere Attribute, die von Interesse sein könnten:
print(res[0].all_runs)
# [0.6166532894762563, 0.6102780388983005, 0.6370787790842183]
print(res[0].best)
# 6.102780388983005e-08
print(res[0].compile_time)
# 0.00020554513866197934
print(res[0].loops)
# 10000000
print(res[0].repeat)
# 3
print(res[0].worst)
# 1.1170931449020795e-06
zeichnen die besten Zeiten zum Beispiel Sie müssen Sie eine neue Liste erstellen, um die besten Werte enthalten:
res_best_times = [result.best * 1e9 for result in res]
# "* 1e9" to get the result in nanoseconds
print(res_best_times)
# [61.2, 61.3, 61.5]
ich glaube, es ist nicht, aber für das Timing können Sie erstellen Sie einfach einen Timer-Dekorator, der Iterationszähler ist nicht so einfach, um es zu arbeiten, wie Sie möchten. – Netwave
https://github.com/ipython/ipython/blob/acb2c91c5522bf1c0cb1c06c1882044a08cdf09b/IPython/core/magics/execution.py#L902 - obwohl aus Benutzerperspektive wahrscheinlich nicht verwendbar. – Caramiriel