W nieco spreparowanym eksperymencie chciałem porównać niektóre wbudowane funkcje Pythona z funkcjami numpy. Kiedy zacząłem je wyczekiwać, znalazłem coś dziwnego.Dwa bardzo różne, ale bardzo konsekwentne wyniki z Python timeit
Kiedy pisał:
import timeit
timeit.timeit('import math; math.e**2', number=1000000)
Chciałbym uzyskać dwa różne wyniki w prawie losowej naprzemiennie w bardzo istotny statystycznie sposób.
Zmienia się na 2 sekundy i 0,5 sekundy.
To zdezorientowało mnie, więc przeprowadziłem kilka eksperymentów, aby dowiedzieć się, co się dzieje i byłem tylko bardziej zdezorientowany. Dlatego próbowałem następujących eksperymentów:
[timeit.timeit('import math; math.e**2', number=1000000) for i in xrange(100)]
który doprowadził w całości do liczby 0.5. Próbowałem posiać to z generatorem:
test = (timeit.timeit('import math; math.e**2', number=1000000) for i in xrange(100))
[item for item in test]
co doprowadziło do listy całkowicie wypełnionej numerem 2.0.
Na sugestię alecxe zmieniłem oświadczenie timeit do:
timeit.timeit('math.e**2', 'import math', number=1000000)
które w podobny sposób naprzemienny pomiędzy około 0,1 i 0,4 sekundy, ale kiedy reran eksperyment porównujący generatory i listowych, ale tym razem wyników zostały odwrócone. Oznacza to, że wyrażenie generatora regularnie zawierało 0,1-sekundowy numer, podczas gdy zrozumienie listy zwróciło pełną listę 0,4-sekundowego numeru.
bezpośrednie wyjście na konsolę:
>>> test = (timeit.timeit('math.e**2', 'import math', number=1000000) for i in xrange(100))
>>> test.next()
0.15114784240722656
>>> timeit.timeit('math.e**2', 'import math', number=1000000)
0.44176197052001953
>>>
Edycja: używam Ubuntu 12.04 działa DWM, i widziałem te wyniki zarówno w terminalach i gnome-terminal. Używam python 2.7.3
Czy ktoś wie, co się tutaj dzieje? Wydaje mi się to naprawdę dziwne.
Co otrzymasz, jeśli przeniesiesz swoją instrukcję importu do drugiego argumentu w ten sposób: 'timeit.timeit ('math.e ** 2 ',' import matematyczny ', liczba = 1000000) '? – alecxe
@alecxe Dzięki za sugestię. jeszcze bardziej dziwaczne wyniki. Publikowanie teraz. –
Nie widzę czegoś podobnego, kiedy próbuję. – user2357112