%timeit 사용법과 개념 정리

조은별·2025년 5월 10일
post-thumbnail

이 문서는 머신러닝 실습 중 %timeit 명령어를 활용하며 공부한 내용을 직접 정리한 것입니다.
단순히 코드 실행 시간을 재는 기능을 넘어, 어떤 상황에서 쓰면 좋은지, 내부적으로 어떤 구조로 작동하는지까지 학습하며 이해한 내용을 기록했습니다.

%timeit 사용법과 개념 정리

1. %timeit이란?

%timeit은 Jupyter Notebook과 IPython에서 사용할 수 있는 라인 매직 명령어(Magic Command)로 지정한 코드 블록을 자동으로 여러 번 실행해서 평균 수행 시간과 표준편차를 출력해주는 도구입니다.

  • 단일 코드 줄: %timeit
  • 여러 줄 코드 블록: %%timeit

2. 사용 방법

2-1. 단일 줄 코드

%timeit sum(range(1000))

출력 예:

10000 loops, best of 5: 23.1 µs per loop

설명:

  • 10000 loops: 이 코드를 1만 번 반복 실행함
  • best of 5: 총 5세트 중 가장 빠른 결과를 보여줌
  • 23.1 µs: 평균 실행 시간 (마이크로초)

2-2. 여러 줄 코드

%%timeit
total = 0
for i in range(1000):
    total += i

3. 내부 동작 원리

  • %timeit기본적으로 자동 반복 횟수를 조정합니다.
    코드가 매우 빠를 경우 반복 횟수를 증가시키고, 느릴 경우 줄입니다.
  • 실행 결과는 최적값(best) 기준으로 보여줍니다.
    이는 CPU 부하나 기타 시스템 잡음을 줄이기 위해서입니다.

4. 실전 비교 예시

import numpy as np

%timeit sum(range(100000))
%timeit np.sum(np.arange(100000))

결과 예시 (시스템에 따라 달라짐):

6.61 ms ± 109 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
487 µs ± 4.59 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

numpy.sum()sum()보다 훨씬 빠름을 확인할 수 있음


5. 언제 사용하면 좋은가?

  • 파이썬 기본 함수 vs NumPy 함수처럼 동일한 결과를 내는 코드의 성능 비교
  • 알고리즘 최적화 전후 성능 확인
  • 데이터 전처리 코드 중 어떤 방식이 더 효율적인지 비교 실험
  • 머신러닝 파이프라인 튜닝 중 속도 병목 부분 찾기

6. 시각적으로 이해하기 (비교 예시 그래프)

예를 들어, 아래와 같이 여러 코드 조각의 실행 시간을 측정하고 그래프로 비교할 수 있다:

import numpy as np
import timeit
import matplotlib.pyplot as plt

setup_code = "import numpy as np"

methods = {
    "sum(range())": "sum(range(100000))",
    "np.sum(np.arange())": "np.sum(np.arange(100000))"
}

times = []
for label, stmt in methods.items():
    t = timeit.timeit(stmt=stmt, setup=setup_code, number=100)
    times.append(t)

plt.bar(methods.keys(), times)
plt.ylabel("Total Time for 100 runs (sec)")
plt.title("sum vs np.sum 실행 시간 비교")
plt.show()

7. 주의사항 및 한계

  • %timeit은 입력/출력(IO), 네트워크 요청, 무작위(random) 동작이 있는 코드에는 정확하지 않음
  • 재귀 함수, 모듈 import 등은 적합하지 않음
  • 반복 횟수를 지정하고 싶다면 -n, -r 옵션 사용 (%timeit -n 10 -r 3)

8. 정리 요약

특징설명
실행 시간 측정평균 + 표준편차 제공
반복 자동 조정코드 속도에 따라 반복 횟수 조절
IO/재귀/랜덤 함수엔 부정확CPU-bound 코드에 적합
%timeit vs timeit.timeit()전자는 Notebook, 후자는 Python Script에서 사용

9. 내가 직접 느낀 점

단순히 시간이 오래 걸린다, 빠르다의 수준이 아니라
수치로 명확하게 비교할 수 있다는 점이 정말 유용했다.
수치가 있으면 성능 튜닝이나 리팩터링 때 훨씬 설득력 있게 설명할 수 있다.

다음에는 %timetime 모듈, cProfileline_profiler도 함께 비교 정리해볼 예정이다.

profile
기록과 회고를 통해 성장하는 데이터, AI 엔지니어 지망생입니다.

0개의 댓글