2017-09-04 1 views
-1

나는 파이썬 3.6을 시간 되려고 노력하고있다. 프로그램을 jupyter notebook에서 가져 오지 만, 마법 명령 인 것 같습니다. %timeit은 여분의 오버 헤드를 많이 추가하여 잘못된 통계를 제공합니다. Jupyter 노트북에서Jupyter 노트북 % timeit이 명령 행보다 1000 배 느린 이유는 무엇입니까?

:

%timeit a=1 
10000000 loops, best of 3: 84.1 ns per loop 

있는 CmdLine

이 경우 시간의 timeit 실행 수백만 빠르게 jupyter 노트북 timeit보다 명령 줄 그래서
python -m timeit 'a=1' 
100000000 loops, best of 3: 0.0163 usec per loop 

에서. 이것에 대한 이유는 무엇이며, 그것을 고칠 방법이 있습니까? jupyter notebook의 timeit 정확한 측정을 제공 할 수 있습니까?

+2

84.1 ** 나노초 **는 0.0163 마이크로 초보다 1 백만 배 느리지 않습니다. 84.1 나노초는 0.0841 마이크로 초이므로 차이는 5 배가됩니다. –

답변

1

해당 숫자를 올바르게 읽지 않습니다. IPython은 나노 초 (약도 ns에 유의하십시오)에보고합니다. 파이썬은 타이밍을 마이크로 초 (usec)으로보고합니다.

1 마이크로 초는 1000 나노초이고; 나노초로 표준화 파이썬은 16.3 나노초를보고 했으므로 속도는 5 배나 빠릅니다.

그러나 결과를 재현 할 수 없습니다. 직접 모두 실행 IPython과에 VIRTUALENV에 같은 파이썬 바이너리를 사용 :

venv-3.6 $ bin/ipython 
Python 3.6.2 (default, Jul 18 2017, 14:26:50) 
Type "copyright", "credits" or "license" for more information. 

IPython 5.2.2 -- An enhanced Interactive Python. 
?   -> Introduction and overview of IPython's features. 
%quickref -> Quick reference. 
help  -> Python's own help system. 
object? -> Details about 'object', use 'object??' for extra details. 

In [1]: %timeit a=1 
100000000 loops, best of 3: 11.9 ns per loop 

In [2]: 
Do you really want to exit ([y]/n)? y 

venv-3.6 $ bin/python -m timeit 'a=1' 
100000000 loops, best of 3: 0.0121 usec per loop 

과 Jupyter 노트북에서

, 다시 같은 VIRTUALENV와; 예상대로 진짜 차이가 없습니다 있도록이 본질적으로, ipython 드라이브 : 11.8 나노초 대 11.9 대 12.1 이잖아 그래서

%timeit a=1 
100000000 loops, best of 3: 11.8 ns per loop 

; 차이를 불러 내기에는 너무 가깝습니다.

+0

작업 중 하나를 확인 했습니까? timeit은 10x만큼 반복되었으므로 영향을 미칩니다. –

+1

@NickA : 반복 횟수가 타이밍에 영향을 미치지 않습니다. 반복마다. 아마 다른 바이너리가 사용되었다는 표시입니다. –

+0

@Martijn 당신은 저울에 대해 옳았습니다. 5의 요인은 여전히 ​​많이 있고 나는 그 문제가 무엇인지 알고 싶습니다. Jupiter 노트북이 아닌 IPython을 사용하고 있기 때문에 내 결과를 재현 할 수없는 이유가있을 수 있습니다. IPython을 사용할 때 속도에는 거의 차이가 없습니다. – user681814

관련 문제