More Related Content Similar to Writing Fast Code (KR) (20) More from Younggun Kim (12) Writing Fast Code (KR)4. • 김영근 a.k.a. scari
• http://younggun.kim
• Badass Alien @ D9, 스마트스터디
• PyCon KR Organizer
• PyCon US 2015 Session Staff
8. The Killers : All These Things That I’ve Done M/V
https://youtu.be/sZTpLvsYYHw
10. • 컴퓨터와 파이썬의 내부 이해하기
• 프로파일링으로 핫스팟 찾기
• 개선 -> 빠른 코드!
12. • 빠르면서도 느린 컴퓨터
• 잘 모르겠지만 프로파일링은 좋은 녀석
• 나도 빠른 코드 짜고 싶다.
14. 10만명이 사용하는 코드의 성능을 1초만 개선하면
10만초 -> 하루하고도 3시간 46분 40초 절약
인류가 낭비하는 시간 절약!
23. 모스(Morse) 부호
Modem (2400)
CDMA(2G)
HSPA(3G, DL)
LTE*
USB 2.0
802.11n
USB 3.0
SATA 3.0
Thunderbolt 2
DDR2 1066Mhz
DDR3 1600Mhz
https://en.wikipedia.org/wiki/List_of_device_bit_rates
≈ 21 bps
≈ 2400 bps
≈ 153 kbit/s
≈ 13.98 Mbit/s
≈ 100 Mbit/s
≈ 480 Mbit/s
≈ 600 Mbit/s
≈ 3 Gbit/s
≈ 6 Gbit/s
≈ 20 Gbit/s
≈ 64 Gbit/s
≈ 102.4 Gbit/s
25. DDR3 1600Mhz
FSB 400 (old Xeon)
PCI Express 3.0 (x16)
QuickPath Interconnect
HyperTransport 3.1
L3 Cache(i7-4790X)
L2 Cache(i7-4790X)
≈ 12.8 GB/s
≈ 12.8 GB/s
≈ 16 GB/s
≈ 38.4 GB/s
≈ 51.2 GB/s
≈ 170 GB/s
≈ 308 GB/s
38. 1초에 찰싹 한번
L1 Cache Acces
L2 Cache Access
L3 Cache Access
RAM Access
SSD I/O
HDD I/O
Internet: Seoul to SF
IPython 실행 (0.6초)
Reboot (5m)
= 1Hz
3초
9초
43초
6분
2-6일
1-12달
12년
63년
32,000년!!
40. L1 Cache Acces
L2 Cache Access
L3 Cache Access
RAM Access
SSD I/O
HDD I/O
Internet: SF to Seoul
IPython 실행 (0.6초)
Reboot (5m) 32,000년!!
내 책상
방 창문
집 밖
지하철 역
걸어서 부산까지
걸어서 인천-런던 왕복
명왕성 벗어남...
처녀자리 70 b
안드로메다?
56. import dis
def find_x(x, my_list):
for elem in my_list:
if x == elem: return True
def find_x2(x, my_list):
if x in my_list: return True
print('find_x()')
dis.dis(find_x)
print('find_x2()')
dis.dis(find_x2)
67. 문제 1.
피보나치킨은 nth 피보나치 숫자가 아니라
n-1번째 피보나치를 찾아야 함.
즉, 입력이 nth 피보나치일때 n-1번째 피보나치를 반환하면 됨.
68. 문제 2.
근데 입력이 피보나치 수가 아니면?
배운자의 정리에 의하면 치킨도르.. 아니 제켄도르프 정리를 적용.
69. 필요한 함수
• 일단 피보나치 구현 fib
• 피보나치 수가 아닌지도 알아야 하니까 is_fibonacci
• 이전 피보나치 수를 알아야 하니까 prev_fibonacci
71. def is_fibonacci_awful(n):
i = 0
while True:
if fib(i) == n:
return True
elif fib(i) > n:
return False
else:
i += 1
continue
is_fibonacci = is_fibonacci_awful
73. def fibonachicken(n):
if is_fibonacci(n) and n > 1: #1인 1닭
return prev_fibonacci(n)
chickens = 0
while n > 1:
cfib = prev_fibonacci(n)
chickens += prev_fibonacci(cfib)
n -= cfib
return chickens + n
84. import pandas as pd
intSeries = pd.Series(5, pd.date_range(start='2000-01-01',
end='2000-01-08', freq='555000U'), dtype=‘int64')
timeSeries = intSeries.astype('datetime64[ns]')
%timeit intSeries.resample('1S', how='last')
%timeit timeSeries.resample('1S', how='last')
%prun intSeries.resample('1S', how='last')
%prun timeSeries.resample('1S', how='last')