저는 파이썬에서 다소 큰 시뮬레이션을 작성 중이며 Cython에서 추가 성능을 얻기를 희망했습니다. 그러나 아래의 코드에서는 다소 큰 루프가 포함되어 있지만 그다지 많은 것을 얻지 못하는 것 같습니다. 대략 100,000 반복.Cython 최적화
초보자가 실수로 작성했거나이 루프 크기가 작아서 큰 영향을 주었습니까? (내 테스트에서 Cython 코드는 약 2 배 빨랐습니다).
import numpy as np;
cimport numpy as np;
import math
ctypedef np.complex64_t cpl_t
cpl = np.complex64
def example(double a, np.ndarray[cpl_t,ndim=2] A):
cdef int N = 100
cdef np.ndarray[cpl_t,ndim=3] B = np.zeros((3,N,N),dtype = cpl)
cdef Py_ssize_t n, m;
for n in range(N):
for m in range(N):
if np.sqrt(A[0,n]) > 1:
B[0,n,m] = A[0,n] + 1j * A[0,m]
return B;
루프 내에서'np.sqrt' 호출을하고 있습니다. 성능 문제처럼 보입니다. 어쨌든 왜 루프에 있습니까? 'a'는 절대로 변하지 않습니다. 왜 'a <= 1 : 루프 앞에서 B'를 반환하는 것일까? – user2357112
@GWW : 저에게 첫 번째 행처럼 보입니다. – user2357112
@ user2357112 고마워요, 그건 제가 간과 한 것입니다. 나는 그것을 옮길 수 있습니다. 실제로, np.sqrt() 또는 np.exp()와 같은 수학 연산은 cython에서 피해야하는 대상입니까? – physicsGuy