for 루프를 사용하여 계산 된 합계에 대해 Continuum Analytics blog 벤치마킹 Python, Cython, Numba에서 주어진 예제를 따르려고합니다. 불행히도 Cython이 Python보다 느리다는 것을 알게되었습니다!Cython은 기본 합계 계산을위한 Python보다 훨씬 빠릅니다.
def python_sum(y):
N = len(y)
x = y[0]
for i in xrange(1,N):
x += y[i]
return x
그리고 지금 내 사이 썬 기능 :
import timeit
import numpy as np
import cython_sum
import python_sum
b = np.ones(10000)
timer = timeit.Timer(stmt='python_sum.python_sum(b)', setup='from __main__ import python_sum, b')
print "Python Sum (ms): %g" % (timer.timeit(1)*1000)
timer = timeit.Timer(stmt='cython_sum.cython_sum(b)', setup='from __main__ import cython_sum, b')
print "Cython (ms): %g" % (timer.timeit(1)*1000)
:
def cython_sum(int[:] y):
cdef int N = y.shape[0]
cdef int x = y[0]
cdef int i
for i in xrange(1,N):
x += y[i]
return x
지금 나는 두 가지 기능과 벤치 마크를 끌어 스크립트를 가지고
여기 내 파이썬 함수 정의의
이제 내 출력은
입니다.Python Sum (ms): 9.44624
Cython (ms): 8.54868
위 링크 된 블로그 게시물의 그래프를 토대로 볼 때, 속도는 100 배에서 1000 배까지 증가 할 것으로 예상했지만 Cython은 바닐라 파이썬보다 약간 빠릅니다.
여기 뭔가 잘못 되었나요? 이것은 간단한 함수 정의로 꽤 기본적인 질문처럼 보입니다. 분명히 많은 사람들이 Cython을 큰 성공으로 사용합니다. 분명히 오류가 나와 관련되어 있어야합니다. 아무도 이것에 대해 밝히고 내가 뭘 잘못하고 있는지 말해 줄 수 있습니까? 감사합니다.
벤치마킹 하위 파입니다. 최소한 두 자리 숫자만큼 실행하십시오. – delnan
내용물과 관련하여 질문이 아니거나 제목이 적합하지 않은 것 같습니다. –
이 코드는 작동하지 않습니다. 'np.ones'는 float 배열을 반환하고 Cython 코드는 예외를 발생시킵니다. –