我正在使用Python编写一个相当大的模拟程序,希望从Cython中获得更好的性能。然而,在下面的代码中,即使它包含一个相当大的循环(约100k次迭代),我似乎并没有得到太多的性能提升。我是犯了一些初学者的错误还是这个循环大小太小以至于没有太大的影响?(在我的测试中,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
的值从未改变,为什么不在循环之前加上if a <= 1: return B
呢?这样可以避免在循环中重复计算。 - user2357112