나는 numpy 속도를 높이기 위해 cython을 배우고있다. numpy 배열 계산을 최적화하는 방법을 알려주는 코드를 작성했습니다. 파이썬 코드는 다음과 같습니다cython을 학습하는 동안의 문제
from numpy import *
def set_onsite(n):
a=linspace(0,n,n+1)
onsite=zeros([n+1,n+1],float)
for i in range(0,n+1):
onsite[i,i]=a[i]*a[i]
return onsite
그런 다음,이 코드 cythonize하려고 : setup.py 파일을 실행 한 후
import numpy as np
cimport numpy as np
cimport cython
import cython
@cython.boundscheck(False)
@cython.wraparound(False)
@cython.nonecheck(False)
def set_onsite(np.int_t n):
cdef np.ndarray[double,ndim=1,mode='c'] a=np.linspace(0,n,n+1)
cdef np.ndarray[double,ndim=2,mode='c'] onsite=np.empty(n+1,n+1)
cdef np.int_t i
for i in range(0,n+1):
onsite[i,i]=a[i]*a[i]
return onsite
을, 나는 .so를 파일을 얻었다. 나는 코드 %timeit myfile.set_onsite(10000)
를 실행하지만, IPython은
TypeError: data type not understood
그래서 사람이 여기에 무슨 일이 일어나고 있는지 말해 줄 수를 보여? 코드를 여러 번 확인했지만 문제가 발생한 위치를 파악하지 못했습니다.
당신에게 너무 많은 감사를! 그것은 작동합니다. 하지만 또 다른 질문이 있습니다. 나는 시간을 계산한다. 결과는 매우 가깝습니다. 어쨌든 Cython을 사용하여 더 빠르게 만들 수 있습니까? – spind
죄송합니다, 성능을 향상시킬 방법을 모르겠습니다. 내가 Cython을 잘 모르기 때문에 새로운 질문을하고 싶을 수도 있습니다. – unutbu