cython クラスを含むこのコード:
cdef class Bench:
cdef long n
def __cinit__(self, long n):
self.n = n
cpdef int factors(self):
n = self.n
cdef int fac = 0
cdef unsigned long i
for i in range(2, n):
if n % i == 0:
fac += 1
return fac
if __name__ == "__main__":
print "hw"
Python拡張機能にコンパイルした後、次のように呼び出しました。
from time import time
t1 = time()
import factors_class
ben = factors_class.Bench(1000000007)
print ben.factors()
t2 = time()
print t2 - t1
207.374788046 (秒) が出力されます。
しかし、純粋な python バージョン (関数とその呼び出しのみ) は ~ 77 秒で実行され、クラス構造のない cython コードは ~ 10.2 秒で実行されます。
cython のクラスレス バージョン:
cdef int factors(unsigned long n):
cdef int fac = 0
cdef unsigned long i
for i in range(2, n):
if n % i == 0:
fac += 1
return fac
print factors(1000000007)
if __name__ == "__main__":
print "hw"
Python バージョン:
def factors(n):
fac = 0
for i in xrange(2, n):
if n % i == 0:
fac += 1
return fac
print factors(10000007)
ライブラリに cython クラスを使用したいのですが、cython での関数型プログラミングに比べて非常に遅いようです。明らかに、私の cython クラス コードに何か問題があります。どうすればその速度を改善できますか?
ベンチマーク結果を要約するには:
Cython クラス : 206s
サイトン:10.2秒
パイソン:77秒