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에서 파이썬을 가져와서 쓰는 식으로 진행해도 좋을 것 같아요.

댓글남기기