とある集会で「Julia は速いぞ!」というアピールのために、Python と Julia で同じように書いているのに20倍以上速度の違うコードを見せました。ということを twitter で書いたところ反響があったので、ここに残しておきます。(もっと速いように書けるだろ出直せとか言わないでください)
環境は以下の通りです。
Python と Julia のバージョンは以下の通りです。
- python 3.7.6
- julia version 1.4.2
以下がコードです。いずれも「10万以下の素数の個数を数えて出力する計算の時間を測定する」という処理です。
import time def is_prime(num): if num <= 1: return False div = (num % i == 0 for i in range(2, num)) return True not in div def num_primes(maxnum): primes = [ n for n in range(1, maxnum+1) if is_prime(n) ] return len(primes) st_time = time.time() print(num_primes(100000)) ed_time = time.time() print(ed_time - st_time, "sec")
- Julia
function is_prime(num) if num <= 1 return false end div = (num % i == 0 for i = 2:num-1) return !(true in div) end function num_primes(maxnum) primes = [ n for n = 1:maxnum if is_prime(n) ] return length(primes) end @time println(num_primes(100000))
ほぼ見た目は同じという風に感じるのではないかと思います。
それぞれコマンドラインで python hoge.py および julia hoge.jl で実行したところ
- Python ... 66.83654356002808 sec
- Julia ... 2.798068 sec
という結果になりました。速度は23.88...≒25倍です。ご参考までに。