IPython% timeit magic: cambia la salida de “mean & std” a “best of 3”

Estoy usando una integración de IPython 6.2.1 con Eclipse / PyDev en Ubuntu. La versión de Python es 3.5.2.
A menudo veo gente sincronizando un guión como

>>>%timeit for _ in range(1000): True 10000 loops, best of 3: 37.8 µs per loop 

Cuando realizo la misma operación, mi salida es

 >>>%timeit for _ in range(1000): True 20.8 µs ± 353 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each) 

Imho, “lo mejor de 3” es la mejor medida, así que me gustaría cambiar mi salida. Leí tanto la documentación de IPython como la de Python timeit . Ambos ni siquiera mencionan, que la salida podría diferir de “lo mejor de 3”. ¿Es esta una cuestión de la implementación de Linux / Eclipse / PyDev o hay una manera de cambiar la salida del módulo timeit ?

PD: Lo mismo ocurre en la consola de Eclipse, cuando uso timeit , por lo que IPython es probablemente irrelevante aquí.

 >>>timeit '"-".join(str(n) for n in range(100))' 11 ns ± 0.0667 ns per loop (mean ± std. dev. of 7 runs, 100000000 loops each) 

Unutbu señaló que puede lograr el comportamiento deseado desde un progtwig. Ejecutar el primer script que llama a timeit.main() aquí, en efecto, devuelve lo mejor de 3. Pero preferiría una versión que pueda ejecutar interactivamente en la consola de Eclipse.

La visualización es generada por un objeto TimeitResult (ver la timeit?? códigos de timeit?? ). Con la opción -o obtengo el objeto que puedo examinar:

 In [95]: %timeit -o np.einsum('bdc,ac->ab', a, b, optimize=False) 170 µs ± 27.5 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each) Out[95]:  In [96]: res = _ In [97]: print(res) 170 µs ± 27.5 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each) In [98]: vars(res) Out[98]: {'_precision': 3, 'all_runs': [1.6981208299985155, 1.6976570829865523, 1.6978941220149864, 1.6976559630129486, 1.6976608499826398, 1.697147795028286, 1.6977746890042908], 'best': 0.0001697147795028286, 'compile_time': 0.0, 'loops': 10000, 'repeat': 7, 'timings': [0.00016981208299985155, 0.00016976570829865524, 0.00016978941220149863, 0.00016976559630129485, 0.00016976608499826398, 0.0001697147795028286, 0.0001697774689004291], 'worst': 0.00016981208299985155} 

Parece que la información para generar lo best of 3 pantallas aún está allí, pero el formateador se ha ido. Se puede encontrar en una versión anterior.

 @property def average(self): return math.fsum(self.timings) / len(self.timings) 

El código está en IPython/core/magics/execution.py

Esta syntax std / mean / dev se agregó a IPython en 5 de octubre de 2016. Consulte el problema # 9984 https://github.com/ipython/ipython/pull/9984 sobre esta mejora. Y la implementación está aquí:

“Se agregó mean + stdv al% timeit magic – Nuevas pruebas pendientes -”

https://github.com/ipython/ipython/commit/509d8539c555ede6222d13cf1693388429213853#diff-ee52fbe4422737ccaa3d6d0b15ea5189

pero la syntax “lo mejor de 3” proviene del módulo de tiempo de python en la función main () y esto es generalmente el mismo en python2 y 3.