나는 현재 사이 썬 다음 루프를 변환하기 위해 노력하고있어 :파이썬 - 파이썬 호출을 제거
이cimport numpy as np
cimport cython
@cython.boundscheck(False) # turn of bounds-checking for entire function
def Interpolation(cells, int nmbcellsx):
cdef np.ndarray[float, ndim=1] x,y,z
cdef int i,j,len
for i in range(nmbcellsx):
x = cells[i].x
y = cells[i].y
z = cells[i].z
len = x.size
for j in range(len):
x[j] = x[j] * y[j] * z[j]
return 0
지금까지 모든 종류의 좋아 보이지만, [i]를 세포에 액세스 * 여전히 필요합니다. 파이썬 호출합니다. 이렇게하면 i- 루프의 병렬화가 방지됩니다. 여기
는 사이 썬 피드백 (사이 썬 -a를 생성)되어그러므로 질문 : 이러한 파이썬 콜백 (즉되도록 라인 9-12 화이트가)을 제거 할 수 있는가?
나는이 같은 셀의 유형을 추가 할 때 :
cimport numpy as np
cimport cython
cdef class cell_t:
cdef np.ndarray x,y,z
@cython.boundscheck(False) # turn of bounds-checking for entire function
def Interpolation(np.ndarray[cell_t,ndim=1] cells, int nmbcellsx):
cdef np.ndarray[float, ndim=1] x,y,z
cdef int i,j,len
for i in range(nmbcellsx):
x = cells[i].x
y = cells[i].y
z = cells[i].z
len = x.size
for j in range(len):
x[j] = x[j] * y[j] * z[j]
return 0
을 나는 다음과 같은 사이 썬 오류가 나타날 수 DTYPE은 "개체", 숫자를 입력하거나 구조체 (가 cell_t에 대해 불평해야합니다 선언 내)
고마워요.
유형 중 여기
테스트 코드입니다. Cython에 힌트를 주면 그것을 인식하게 만들 수 있습니다. – Wessie사이드 노트로. 루프와 관련된 함수에서 아무 것도 반환하지 않는 것처럼 보이거나 루프가 로컬이 아닌 다른 것을 돌연변이시키지 않습니다. 그냥 머리 - 업. – Wessie
이것은 더 복잡한 기능의 단순한 예입니다. 셀 (Cell)은 실제로 호출 셀 (Cell) 개체의 누드 ndarray입니다. Cell 클래스가 numpy 배열 x, y, z만을 가집니다. 이 문제를 어떻게 해결할 수 있습니까? – user1829358