Julia vs. (pure)python
๐ ๋ชฉ์ฐจ (Contents)
ํ ๋ผ์ ๊ฑฐ๋ถ์ด
- ๋๊ฐ ๋ ๋น ๋ฅผ๊น์. python๊ณผ julia์ค์์.
how to compute pi - spigot alogirithm
- pi๋ฅผ ๊ณ์ฐํฉ๋๋ค. ์์ฃผ์จ์ ๋งํฉ๋๋ค. ๋น ํ์ด ๋จน๊ณ ์ถ๋ค์
- ์๋ฌดํผ, ๋ด์๊ฐ์ ํ๋ค๊ฐ pi๋ ์ด๋ป๊ฒ ๊ณ์ฐํ๋์ง๊ฐ ๊ฐ์๊ธฐ ๊ถ๊ธํด์ก์ต๋๋ค. ์์ฃผ๋ฅผ ์ฌ๊ณ ๋ฐ์ง๋ฆ์ ์ฌ๊ณ ๋ญ ๊ทธ๋ฐ ์์ผ๋ก ํ์ง๋ ์์ ๊ฑฐ๋๊น์(์ ๋ฐ๋ ๋ฌธ์ ๊ฐ ์๊ตฌ์)
- ๊ทธ๋์ ์ฐพ์๋ณด๋, ์ํคํผ๋์์ ๊ตฌํ๋ ๋ฐฉ์์ด ์์ต๋๋ค.
- ๋ค์ํ ์๊ณ ๋ฆฌ์ฆ์ด ์๋๋ฐ spigot ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํด๋ณด๋ ค๊ณ ํฉ๋๋ค.
- ๋ฐฉ์ ์์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ํ์ด์ฌ ์ฝ๋๋ก ๋ฐ๊พธ๋ฉด
%%timeit -n 10 -r 1
def compute_pi(n=10):
r = 0
for k in range(0, n):
r+= 1/(16**k)*( 4/(8*k+1) - 2/(8*k+4) - 1/(8*k+5) - 1/(8*k+6))
return r
compute_pi(20000)
- julia ์ฝ๋๋ก ๋ฐ๊พธ๋ฉด
@time begin
function compute_pi(n=10)
r = 0
for k in 0:9
r+= 1/(16^k)*( 4/(8k+1) - 2/(8k+4) - 1/(8k+5) - 1/(8k+6))
end
r
end
compute_pi(20000)
end
- python์ ๊ฒฝ์ฐ๋ 2.46์ด๊ฐ ๊ฑธ๋ฆฌ๊ณ , julia์ ๊ฒฝ์ฐ๋ 0.02์ด๊ฐ ๊ฑธ๋ฆฝ๋๋คโฆ.
- ์ข ๋ ๋น๊ต๋ฅผ ํด๋ณด๊ธด ํด์ผ๊ฒ ์ง๋ง, ๋น ๋ฅด๊ธด ์ง์ง ๊ฐ๋น ๋ฅด๋ค์โฆ..
- ๋ฌผ๋ก
numpy๋ฅผ ์ฌ์ฉํ๋ฉด ์๋๊ฐ ๋งค์ฐ ๋นจ๋ผ์ง๊ธฐ๋ ํฉ๋๋ค. 0.00047์ด, ์ฅด๋ฆฌ์๋ณด๋ค ๋ ๋นจ๋ผ์ง๊ธฐ๋ ํ์ฃ .
%%timeit -n 1 -r 1
def compute_pi(n=10):
return np.array([ 1/(16**k)*( 4/(8*k+1) - 2/(8*k+4) - 1/(8*k+5) - 1/(8*k+6)) for k in range(0, 10)]).sum()
print(compute_pi(20000))
fibonacci
-
์ด๋ฒ์๋ fibonacci๋ก ๋น๊ตํด๋ณด๊ฒ ์ต๋๋ค.
-
python์ ๊ฒฝ์ฐ 3.26์ด๊ฐ ๊ฑธ๋ฆฝ๋๋ค.
%%timeit -n 1 -r 1
def fibo(n):
if n in {0, 1}:
return 1
else:
return fibo(n-2)+fibo(n-1)
print(fibo(34))
9227465
3.26 s ยฑ 0 ns per loop (mean ยฑ std. dev. of 1 run, 1 loop each)
- julia์ ๊ฒฝ์ฐ 0.11์ด๊ฐ ๊ฑธ๋ฆฝ๋๋ค. ์ฆ **julia๊ฐ ์ฝ 30๋ฐฐ ๋น ๋ฆ ๋๋ค.
@time begin
function fibo(n)
if n==0 || n==1
return 1
else
return fibo(n-2) + fibo(n-1)
end
end
fibo(34)
end
0.110786 seconds (740 allocations: 41.846 KiB)
9227465
- ๋ฌผ๋ก memoization์ ์ด์ฉํ๋ฉด python 11000๋ฐฐ ๋นจ๋ผ์ง๋๋ค๋ง, julia์๋ lru_cache๋ ์์ต๋๋ค. pureํ๊ฒ ๋น๊ตํด์ผ์ฃ .
%%timeit -n 1 -r 1
from functools import lru_cache
@lru_cache(maxsize=12)
def fibo(n):
if n in {0, 1}:
return 1
else:
return fibo(n-2)+fibo(n-1)
print(fibo(34))
9227465
288 ยตs ยฑ 0 ns per loop (mean ยฑ std. dev. of 1 run, 1 loop each)
wrap-up
- ์ฝ๋ฉํ ๋์ ํธ๋ฆฌํจ์ julia๋ python์ด ์ ์ฌํ๋ฐ, ์๋ ์ธก๋ฉด์์๋ python์ด julia๋ฅผ ๋ฐ๋ผ์ก์ ์๊ฐ ์์ต๋๋ค. ์์ด์ด๋ค์.
- ๊ณ์ฐ์ด ๋ณต์กํ ๋๋ julia๋ฅผ ํ๋ฒ ์จ๋ด์ผ๋ ๊ฒ ๊ฐ์์. ๊ทธ ๋ถ๋ถ๋ง ๋ฐ๋ก julia๋ก ๊ตฌ์ฑํ๊ณ , julia์์ ํ์ด์ฌ์ ๊ฐ์ ธ์์ ์ฐ๋ ์์ผ๋ก ์งํํด๋ ์ข์ ๊ฒ ๊ฐ์์.
GitHub์์ ์ด ๊ธ์ ๋งํฌ๋ค์ด ์๋ณธ ๋ณด๊ธฐ & ์์ ์ ์src/content/posts/2018-08-28-julia_vs_python_compute_pi