Python 3.4 기준에서 설명드리겠습니다.
https://docs.python.org/3.4/library/timeit.html#
위 API에서도 사용법이 나와 있지만 거기에 나와 있는 예제는 사용자가 생성한 method 나 다른 module 에서 정의한 type 을 사용하면 오류가 발생했습니다.
API에 보면 timeit의 definition이 정의되어 있습니다.
timeit.timeit(stmt='pass', setup='pass', timer=<default timer>, number=1000000)
stmt : 실행할 code(statement)를 string 형식으로 적어주는 곳입니다.
setup : 해당 statement를 실행하기 위해 사전에 실행해야 할 code를 적어주는 곳입니다.
number : statement를 몇번 수행할 것인지 횟수를 적어주는 곳입니다.
timer는 따로 설정하지 않고 default timer 로 수행해도 됩니다.
위 parameter 들 중에 setup 부분에서 import를 해줘야지만 사용자가 생성한 method 나 사용자 정의 type (module 사용 포함) 이 가능합니다.
예를 들어서 NumPy 학습중 array 의 scalar 곱하기 연산과 일반적인 list 의 각각의 요소에 곱하기를 한 것의 시간을 비교하고자 할 경우
import numpy as np
arr = np.arange(1e7)
larr = arr.tolist()
def list_times(alist, scalar):
for i, val in enumerate(alist):
alist[i] = val * scalar
return alist
위와 같이 정의를 해놓고 속도를 측정하고자 할때 아래의 방법으로 가능합니다.
>>> timeit.timeit(stmt = "arr * 1.1", setup = "from __main__ import arr", number = 1) 0.059031772193293364 >>> timeit.timeit(stmt = "list_times(larr, 1.1)", setup = "from __main__ import list_times, larr", number = 1) 1.944868012867346
setup 부분에 import 관련 구문을 적어줘야 따로 생성한 method 와 value의 사용이 가능합니다.
위 방법이 아니라 stmt 와 setup 을 따로 Timer 객체로 선언한 뒤에 하는 방법도 있습니다. 결과는 위와 같습니다.
>>> t = timeit.Timer("arr * 1.1", "from __main__ import arr") >>> time = t.timeit(1) >>> print(time) 0.055905614852235885 >>> t = timeit.Timer("list_times(larr, 1.1)", "from __main__ import list_times, larr") >>> time = t.timeit(1) >>> print(time) 1.8926470726594289
* 전체 예제
댓글 없음:
댓글 쓰기