f_
frhyme.code
•python•โฑ ์•ฝ 4๋ถ„ ์†Œ์š”

Julia vs. (pure)python

ํ† ๋ผ์™€ ๊ฑฐ๋ถ์ด

  • ๋ˆ„๊ฐ€ ๋” ๋น ๋ฅผ๊นŒ์š”. 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
%%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์—์„œ ํŒŒ์ด์ฌ์„ ๊ฐ€์ ธ์™€์„œ ์“ฐ๋Š” ์‹์œผ๋กœ ์ง„ํ–‰ํ•ด๋„ ์ข‹์„ ๊ฒƒ ๊ฐ™์•„์š”.

๐Ÿ’กRELATED ARTICLES ยท ํ•จ๊ป˜ ์ฝ์œผ๋ฉด ์ข‹์€ ์—ฐ๊ด€ ํฌ์ŠคํŠธ

๊ธ€ ์ฃผ์†Œ๊ฐ€ ํด๋ฆฝ๋ณด๋“œ์— ๋ณต์‚ฌ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.