차밍이
[파이썬] %timeit으로 jupyter notebook에서 Cell 단위 코드 수행 시간 확인하기 본문
목차
들어가며
jupyter notebook
에서 셀 단위로 속도를 확인하는 방법을 알아보자.
속도를 비교해볼 함수 리스트의 원소들을 모두 곱하는 함수로 아래와 같다.
def multiplyAll_v1(s:list) -> int:
ans = 1
for n in s:
ans *= n
return ans
from functools import reduce
def multiplyAll_v2(s:list) -> int:
return eval("*".join([str(n) for n in s]))
def multiplyAll_v3(s:list) -> int:
return reduce(lambda x, y: x * y, s)
해당 함수나 reduce
, eval
함수에 대해 더 알고 싶다면
[Python] 리스트 요소 곱하기, 배열 원소들끼리 곱하기
[Python] eval() / exec() 함수로 문자열을 파이썬 코드로 실행하기
% 와 %% 의 차이
%
는 line command로 하나의 라인에 대해서 적용된다.
%%
는 cell command로 해당 Cell에 작성된 모든 코드에 적용된다.
나는 jupyter의 하나의 셀에 대해서 수행되는 속도를 확인하기 위함이므로
Cell Command인 %%
를 사용해서 명령을 수행할 것이다.
그래서 %%time
과 %%timeit
으로 사용하는 것이다.
%%time
한번만 실행하면서 수행 시간을 확인하는 방법
너무 간단한 함수는 한 번만 수행하기 때문에 수행 시간이 너무 짧게 나올 수 있다.
%%time
multiplyAll_v1([i for i in range(1, 1000)])
>>> Wall time: 0 ns
%%time
multiplyAll_v2([i for i in range(1, 1000)])
>>> Wall time: 992 µs
%%time
multiplyAll_v3([i for i in range(1, 10000)])
>>> Wall time: 496 µs
기교부리지 않고 기본에 충실하게 for
문을 돌리는 것이 가장 빠른 결과를 볼 수 있다.
%%timeit
timeit
여러번 반복해서 코드를 수행하면서 평균과 표준편차를 구해서 더욱 정밀하게 시간을 측정할 수 있다.
옵션
-r
: 몇 loop를 돌 것인지 설정
-n
: 각 loop당 몇 번 실행할 것인지 설정
%%timeit -n 100 -r 10
multiplyAll_v1([5,6,7,8,9])
>>> 224 ns ± 4.05 ns per loop (mean ± std. dev. of 10 runs, 100 loops each)
%%timeit -n 100 -r 10
multiplyAll_v2([5,6,7,8,9])
>>> 7.13 µs ± 1.01 µs per loop (mean ± std. dev. of 10 runs, 100 loops each)
%%timeit -n 100 -r 10
multiplyAll_v3([5,6,7,8,9])
>>> 480 ns ± 48.6 ns per loop (mean ± std. dev. of 10 runs, 100 loops each)
각 loop 별 평균과 표준편차를 같이 보여주는 것을 볼 수 있다.
time
에서 확인한 것과 마찬가지로 v1
이 가장 빠르고 v3
가 두번째, v2
가 가장 느리다.
역시 기본에 충실하자...
이와 같은 방법으로 Cell 별로 코드 수행속도를 확인 및 비교할 수 있다.
'파이썬 > 기본 문법 정리' 카테고리의 다른 글
[Python] 파이썬 패키지란? - package에 대한 설명 및 예시 (0) | 2022.06.05 |
---|---|
[Python] 모듈 vs 스크립트 vs 패키지 차이점을 알아보자 (0) | 2022.06.04 |
[Python] Scatter Plot Animation - 영상 그래프 제작 (0) | 2022.04.21 |
[Python] 판다스 apply - 함수에 복수 인자 적용하기 (2) | 2022.03.02 |
[Python] 리스트 요소 곱하기, 배열 원소들끼리 곱하기 (1) | 2022.02.27 |
[Python] eval() / exec() 함수로 문자열을 파이썬 코드로 실행하기 (1) | 2022.02.26 |
[Python] 객체에 속성 관련 함수들 hasattr, delattr, setattr, getattr (1) | 2022.02.26 |
[Python] reduce 함수 사용 방법 (1) | 2022.02.25 |