Kod zawsze czytam, żeby obliczyć czas w ten sposób:
%timeit function()
Czy możesz wyjaśnić, co oznacza tutaj „%”?
Myślę, że „%” jest zawsze używany do zastąpienia czegoś w ciągu, na przykład% s oznacza zastąpienie ciągu,% d zastąpienie danych, ale nie mam pojęcia o tym przypadku.
Odpowiedzi:
%timeit
to magiczna funkcja ipython , której można użyć do określenia czasu określonego fragmentu kodu (pojedyncza instrukcja wykonania lub pojedyncza metoda).Z dokumentów:
Aby z niego skorzystać, na przykład jeśli chcemy dowiedzieć się, czy używanie
xrange
jest szybsze niż używanierange
, możesz po prostu zrobić:In [1]: %timeit for _ in range(1000): True 10000 loops, best of 3: 37.8 µs per loop In [2]: %timeit for _ in xrange(1000): True 10000 loops, best of 3: 29.6 µs per loop
Otrzymasz dla nich czasy.
Głównymi zaletami
%timeit
są:że nie musisz importować
timeit.timeit
ze standardowej biblioteki i uruchamiać kod wiele razy, aby dowiedzieć się, które jest lepsze.% timeit automatycznie obliczy liczbę uruchomień wymaganych dla twojego kodu na podstawie łącznie 2-sekundowego okna wykonywania.
Możesz także użyć bieżących zmiennych konsoli bez przekazywania całego fragmentu kodu, jak w przypadku tworzenia
timeit.timeit
zmiennej, która jest zbudowana w innym środowisku, które działa.źródło
%timeit function()
timer.timeit
- czy to rzeczywista nazwa modułu?10000 loops, best of 3: 29.6 µs per loop
można zinterpretować jako: (1.) wyrażenie jest uruchamiane 10000 razy, aby uzyskać całkowity czas (2.) następnie całkowity czas jest dzielony przez 10000, aby uzyskać czas „na pętlę” i (3.) obliczenie całkowitego czasu 3 razy i na koniec (4.) z 3 całkowitych czasów, minimalny łączny czas (aka „najlepsza z 3”) jest używany jako wynik. czy moja interpretacja jest prawidłowa, tak / nie?Jest to znane jako magia linii w iPythonie. Są wyjątkowe, ponieważ ich argumenty rozciągają się tylko do końca bieżącej linii, a sama magia jest tak naprawdę skonstruowana pod kątem rozwoju wiersza poleceń.
timeit
służy do mierzenia czasu wykonania kodu.Jeśli chcesz zobaczyć całą magię, której możesz użyć, możesz po prostu wpisać:
aby uzyskać listę zarówno magii liniowej, jak i magii komórkowej.
Kilka dodatkowych magicznych informacji z dokumentacji tutaj :
W zależności od tego, czy jesteś w trybie liniowym, czy komórkowym , istnieją dwa różne sposoby użycia
%timeit
. Twoje pytanie ilustruje pierwszy sposób:In [1]: %timeit range(100)
vs.
In [1]: %%timeit : x = range(100) :
źródło
IPython je przechwytuje, nazywa się je wbudowanymi magicznymi poleceniami, oto lista: https://ipython.org/ipython-doc/dev/interactive/magics.html
Możesz również tworzyć własne, niestandardowe magie, https://ipython.org/ipython-doc/dev/config/custommagics.html
Twoje
timeit
jest tutaj https://ipython.org/ipython-doc/dev/interactive/magics.html#magic-timeitźródło
Chciałem tylko dodać bardzo subtelny punkt dotyczący %% timeit. Biorąc pod uwagę, że uruchamia „magię” komórki , pojawi się błąd ...
UsageError:
%%timeit
Nie znaleziono funkcji magicznej linii... jeśli są jakieś linie kodu / komentarza powyżej %% timeit. Innymi słowy, upewnij się, że %% timeit jest pierwszym poleceniem w Twojej komórce.
Wiem, że to drobiazg, o którym mówią wszyscy eksperci, ale chciałem tylko dodać moje pół centa dla młodych czarodziejów zaczynających od magicznych sztuczek.
źródło
I Chciałbym tylko dodać kolejną użyteczną zaletę używania% timeit aby odpowiedzieć przez MU無że:
PS: Wiem, że to powinien być komentarz, aby odpowiedzieć powyżej, ale obecnie nie mam wystarczającej reputacji, mam nadzieję, że to, co piszę, okaże się komuś pomocne i pomoże mi zdobyć wystarczającą reputację, aby móc komentować następnym razem.
źródło
Magia linii jest poprzedzona znakiem % i działa podobnie jak wywołania wiersza poleceń systemu operacyjnego: otrzymują jako argument pozostałą część linii, gdzie argumenty są przekazywane bez nawiasów ani cudzysłowów. Magie komórkowe są poprzedzone podwójnym %% i są to funkcje, które jako argument pobierają nie tylko resztę wiersza, ale także wiersze poniżej w osobnym argumencie.
źródło