
이 문서는 머신러닝 실습 중
%timeit명령어를 활용하며 공부한 내용을 직접 정리한 것입니다.
단순히 코드 실행 시간을 재는 기능을 넘어, 어떤 상황에서 쓰면 좋은지, 내부적으로 어떤 구조로 작동하는지까지 학습하며 이해한 내용을 기록했습니다.
%timeit은 Jupyter Notebook과 IPython에서 사용할 수 있는 라인 매직 명령어(Magic Command)로 지정한 코드 블록을 자동으로 여러 번 실행해서 평균 수행 시간과 표준편차를 출력해주는 도구입니다.
%timeit%%timeit%timeit sum(range(1000))
출력 예:
10000 loops, best of 5: 23.1 µs per loop
설명:
10000 loops: 이 코드를 1만 번 반복 실행함best of 5: 총 5세트 중 가장 빠른 결과를 보여줌23.1 µs: 평균 실행 시간 (마이크로초)%%timeit
total = 0
for i in range(1000):
total += i
%timeit은 기본적으로 자동 반복 횟수를 조정합니다.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()보다 훨씬 빠름을 확인할 수 있음
예를 들어, 아래와 같이 여러 코드 조각의 실행 시간을 측정하고 그래프로 비교할 수 있다:
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()
%timeit은 입력/출력(IO), 네트워크 요청, 무작위(random) 동작이 있는 코드에는 정확하지 않음-n, -r 옵션 사용 (%timeit -n 10 -r 3)| 특징 | 설명 |
|---|---|
| 실행 시간 측정 | 평균 + 표준편차 제공 |
| 반복 자동 조정 | 코드 속도에 따라 반복 횟수 조절 |
| IO/재귀/랜덤 함수엔 부정확 | CPU-bound 코드에 적합 |
%timeit vs timeit.timeit() | 전자는 Notebook, 후자는 Python Script에서 사용 |
단순히 시간이 오래 걸린다, 빠르다의 수준이 아니라
수치로 명확하게 비교할 수 있다는 점이 정말 유용했다.
수치가 있으면 성능 튜닝이나 리팩터링 때 훨씬 설득력 있게 설명할 수 있다.
다음에는 %time과 time 모듈, cProfile과 line_profiler도 함께 비교 정리해볼 예정이다.