파이썬에서 % timeit은 무엇입니까?


98

나는 항상 다음과 같이 시간을 계산하기 위해 코드를 읽습니다.

%timeit function()

여기서 "%"가 무엇을 의미하는지 설명해 주시겠습니까?

"%"는 항상 문자열에서 무언가를 바꾸는 데 사용됩니다. 예를 들어 % s는 문자열을 바꾸고 % d는 데이터를 바꾸는 것을 의미합니다.하지만이 경우에 대해 전혀 모릅니다.


16
그것은 iPython의 마법 명령입니다. 참조 : iPython Magics
MrAlexBailey

답변:


92

%timeit특정 코드 조각 (단일 실행 문 또는 단일 메서드)의 시간을 측정하는 데 사용할 수 있는 ipython 매직 함수입니다.

문서에서 :

% timeit

Time execution of a Python statement or expression

Usage, in line mode:
    %timeit [-n<N> -r<R> [-t|-c] -q -p<P> -o] statement

예를 들어 using xrange이 using보다 빠른지 확인 range하려면 다음을 수행하면됩니다.

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

그리고 당신은 그들에 대한 타이밍을 얻을 것입니다.

의 주요 장점 %timeit은 다음 과 같습니다.

  • 당신이 것을 하지 않는 수입에이 timeit.timeit 표준 라이브러리에서 , 그리고 그림에 코드를 여러 번 실행하는 밖으로 더 나은 방법입니다.

  • % timeit은 총 2 초의 실행 창을 기준으로 코드에 필요한 실행 횟수를 자동으로 계산합니다.

  • timeit.timeittimeit이 작동하는 다른 환경에서 빌드 된 변수를 빌드하는 경우와 같이 전체 코드 스 니펫을 전달하지 않고도 현재 콘솔 변수를 사용할 수도 있습니다 .


1
ipython 셸에서 매크로 또는 줄 집합 시간을 측정하는 방법이 있습니까?
alpha_989 dec.

2
@ alpha_989 예, 함수 내에서 이러한 줄 집합을 래핑 한 다음 함수 시간을 다음과 같이 지정할 수 있습니다.%timeit function()
mu 無

@mu 無 : 명확히 해주세요 timer.timeit-그게 실제 모듈 이름인가요?
수원지


출력 10000 loops, best of 3: 29.6 µs per loop은 다음과 같이 해석 될 수 있습니다. (1.) 표현식이 총 시간을 얻기 위해 10000 번 실행되고 (2.) 총 시간을 10000으로 나누어 "루프 당"시간을 얻고 (3.) 총 시간 계산이 완료됩니다. 총 3 회 중 3 회, 마지막으로 (4.), 최소 총 시간 (일명 "최고 3")이 출력으로 사용됩니다. 내 해석이 맞습니까, 예 / 아니요?
Trevor Boyd Smith

38

이것은 iPython에서 라인 매직 으로 알려져 있습니다. 그들은 그들의 주장이 현재 줄의 끝까지 만 확장된다는 점에서 독특하고 매직 자체는 실제로 명령 줄 개발을 위해 구조화되어 있습니다. timeit코드 실행 시간을 측정하는 데 사용됩니다.

사용할 수있는 모든 마법을보고 싶다면 다음을 입력하면됩니다.

%lsmagic

라인 매직과 셀 매직의 목록을 가져옵니다.

여기 문서에서 몇 가지 추가 마법 정보 :

IPython에는 Python 구문과 직교하고 새로운 명령으로 사용자가 확장 할 수있는 미니 명령 언어를 효과적으로 제공하는 마법 이라고하는 명령 시스템이 있습니다. 매직은 대화 형으로 입력하기위한 것이므로 인수를 구분하는 데 공백을 사용하고 옵션을 위해 대시를 사용하고 명령 줄 환경에서 일반적인 기타 규칙을 사용하는 것과 같은 명령 줄 규칙을 사용합니다.

라인 모드 인지 모드 인지에 따라 를 사용하는 두 가지 방법이 있습니다 %timeit. 귀하의 질문은 첫 번째 방법을 설명합니다.

In [1]: %timeit range(100)

In [1]: %%timeit 
      : x = range(100)
      :


2

나는 mu 無에 의해 대답 하기 위해 % timeit를 사용하는 또 다른 유용한 이점을 추가하고 싶습니다 .

  • 당신은 또한 현재 콘솔 변수를 사용할 수있다 timeit 작동한다는 또 다른 환경에 내장되어 내장 변수에 timeit.timeit의 경우에서와 같이 전체 코드를 통과하지 않고.

추신 : 나는 이것이 위에 대답 할 코멘트 여야한다는 것을 알고 있지만, 현재 나는 그것에 대해 충분한 평판을 가지고 있지 않습니다. 내가 쓴 내용이 누군가에게 도움이되고 다음에 코멘트 할만한 충분한 평판을 얻을 수 있기를 바랍니다.


1
다른 사람의 답변을 편집하여 개선 할 수도 있습니다. 당신은 이미 충분히 명성을 가지고 있어야
Tarick 솟아에게

감사합니다. @TarickWelling
ANKIT 아그라 왈

2

%% timeit에 대해 매우 미묘한 점 을 추가하고 싶었습니다 . 에서 "마법"을 실행하면 오류가 발생합니다.

UsageError : Line magic function %%timeitnot found

... %% timeit 위에 코드 / 주석 행이있는 경우. 즉, %% timeit이 셀의 첫 번째 명령인지 확인하십시오.

나는 모든 전문가들이 이런 말을 할 작은 요점이라는 것을 알고 있지만 마술을 시작하는 젊은 마법사를 위해 내 절반을 더하고 싶었습니다.


1
이는 iPython 셸에는 적용되지 않으며 Jupyter 노트북에서만 적용됩니다
snakecharmerb

0

라인 매직% 문자 로 시작되며 OS 명령 줄 호출과 매우 유사하게 작동합니다. 라인의 나머지 부분을 인수로 가져 오며 인수는 괄호 나 따옴표없이 전달됩니다. 셀 매직 에는 이중 %% 접두사가 붙고 나머지 줄뿐만 아니라 그 아래의 줄도 별도의 인수로 인수로 가져 오는 함수입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.