%%cython
import numpy as np
cimport numpy as np
def cy_sum(int n):
cdef double s=0
cdef int i
for i in range(n):
s += np.sqrt(i)
return s
我有上面计算平方根和的代码。
通过使用cython -a
,我得到了如图所示的结果。
cython代码在函数调用np.sqrt(i)
与python交互,与纯python代码相比没有任何改进。在
我不知道在指定变量类型时是否做错了什么。
还有其他解决方案,例如使用i**(1/2)
或从clib
导入函数sqrt
,但我想了解为什么cython不能编译np.sqrt公司在这种情况下。在
谢谢。在
通常,当Cython看到python函数调用时,它被视为一个不透明的操作。Cython可能会省去一些调用开销,但否则它将生成与从python调用该函数完全相同的语义。在
某些numpy构造,如
ndarray[dtype]
类型,由Cython编译器进行特殊大小写,以生成更高效的代码。numpy-ufunc不是,所以to-cythonnp.sqrt
只是另一个python函数,所以它除了调用python来运行它之外,什么也做不到。在其他python加速器,例如
numba
将拦截对np.sqrt
的调用,并将其重写为等效的低级代码。在相关问题 更多 >
编程相关推荐