차밍이

[파이썬] %timeit으로 jupyter notebook에서 Cell 단위 코드 수행 시간 확인하기 본문

파이썬/기본 문법 정리

[파이썬] %timeit으로 jupyter notebook에서 Cell 단위 코드 수행 시간 확인하기

2022. 2. 28. 18:59
반응형

목차

    들어가며

    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] reduce 함수 사용 방법

    [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문을 돌리는 것이 가장 빠른 결과를 볼 수 있다.

     

    v2 결과 사진

     

    %%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 별로 코드 수행속도를 확인 및 비교할 수 있다.

    반응형

    관련된 글 보기

    Comments