我正在用Python编写一个相当大的模拟程序,并希望从Cython获得一些额外的性能。然而,对于下面的代码,我似乎没有得到太多,即使它包含一个相当大的循环。大约10万次迭代。在
我是不是犯了一些初学者的错误,或者这个循环的大小仅仅是为了达到一个大的效果?(在我的测试中,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;
您应该使用编译器指令。我用Python编写了你的函数
在Cython中(您可以了解编译器指令here)
^{pr2}$我比较了这两种功能
在本例中,Cython比Python快450倍左右。在
相关问题 更多 >
编程相关推荐