시간 측정의 중요성 및 방법
Page content
강의 홍보
- 취준생을 위한 강의를 제작하였습니다.
- 본 블로그를 통해서 강의를 수강하신 분은 게시글 제목과 링크를 수강하여 인프런 메시지를 통해 보내주시기를 바랍니다.
스타벅스 아이스 아메리카노를 선물
로 보내드리겠습니다.
- [비전공자 대환영] 제로베이스도 쉽게 입문하는 파이썬 데이터 분석 - 캐글입문기
1줄 요약
- 코드를 효과적으로 작성해야 하는 이유를 확인한다.
Calculation 비교
-
요한 카를 프리드리히 가우스(1777-1855)가 문제를 냈다고 알려짐
-
1 + 2 + … + 1000000 까지 해당하는 모든 연속 양수의 합계를 구한다.
-
두가지 방법이 존재한다.
- 숫자를 하나씩 추가하여 더하는 방법
- 1 + 2 + … + N = $ \frac{N \ast (N + 1)}{2} $
-
어느 것의 계산 속도가 더 빠를까? 각 함수를 작성해본다.
def brute_force(N):
res = 0
for i in range(1,N+1):
res += i
return res
def formula(N):
return N*(N+1)/2
- time() 함수를 활용하여 성능을 측정합니다.
import time
# Calculate the result of the problem using formula() and print the time required
N = 10000000
start_time = time.time()
first_method = formula(N)
print("First Method is :{}".format(first_method))
print("Time using formula: {} sec".format(time.time() - start_time))
# Calculate the result of the problem using brute_force() and print the time required
start_time = time.time()
second_method = brute_force(N)
print("Second Method is :{}".format(second_method))
print("Time using the brute force: {} sec".format(time.time() - start_time))
First Method is :50000005000000.0
Time using formula: 0.0016944408416748047 sec
Second Method is :50000005000000
Time using the brute force: 0.5611939430236816 sec
- 원하는 결괏값은 같지만, 계산 속도의 차이는 현저하게 차이가 나는 것을 확인할 수 있다.
반복문 속도 비교
- 이번에는 반복문의 속도를 비교해보는 코드를 작성해본다.
- List Comprehension vs For Loop
import time
words = ['<html>',
'<head><title>404 Not Found</title></head>',
'<body>',
'<center><h1>404 Not Found</h1></center>',
'<hr><center>nginx</center>',
'</body>',
'</html>']
# Store the time before the execution
start_time = time.time()
# Execute the operation
letlist = [wrd for wrd in words if wrd.startswith('b')]
# Store and print the difference between the start and the current time
print("List Comprehension: {}".format(letlist))
print('Time using list comprehension: {} sec'.format(time.time() - start_time))
# Store the time before the execution
start_time = time.time()
# Execute the operation
letlist = []
for wrd in words:
if wrd.startswith('b'):
letlist.append(wrd)
# Print the difference between the start and the current time
print('Time using for loop: {} sec'.format(time.time() - start_time))
List Comprehension: []
Time using list comprehension: 0.0007379055023193359 sec
Time using for loop: 0.0001385211944580078 sec
- 두 가지의 속도 차이가 생각만큼 크지는 않다.
- 이런 경우에는, 코드의 가독성이 더 중요한 요소로 작용할 수 있을 것이다.