Cythonを使って、Pythonを高速化してみよう②:型をつけてみる。
Sponsored Links
皆さんこんにちは
お元気ですか。私は元気です。
Cythonについてもう少しやってみます。
Cython公式の素数の一覧を出力するサンプルを少し変更してみました。
こちらをCythonを使って高速化してみましょう。
def primes(kmax): result = [] k = 0 n = 2 p = [0] * 100000 while k < kmax: i = 0 while i < k and n % p[i] != 0: i = i + 1 if i == k: p[k] = n k = k + 1 result.append(n) n = n + 1 return result
まずは、変更を何も加えていない時です。
primesに与える引数は10000の時です。
速度 | |
Python | 11.518 |
Cython | 8.725 |
pypy | 0.840 |
まず、ソースコードをそのままにしても、Cythonを利用したほうがいくらか早くなっていることがわかります。
次に型をつけてみましょう。
ソースコードとしては以下のようになります。
def primes(kmax): result = [] cdef int k = 0 cdef int n = 2 cdef int p[100000] while k < kmax: i = 0 while i < k and n % p[i] != 0: i = i + 1 if i == k: p[k] = n k = k + 1 result.append(n) n = n + 1 return result
変化した箇所はcdef intをつけて型を指定したことです。
Cythonで計測すると0.266990184784になりました。型がつくだけで、こんなに高速化できるのには本当に驚いた…。
今度から遅くなる時にはCythonを有効活用してみるかなぁ。。。