呼叫np.sqrt公司在赛顿

2024-04-27 00:24:34 发布

您现在位置:Python中文网/ 问答频道 /正文

%%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 -a,我得到了如图所示的结果。 cython代码在函数调用np.sqrt(i)与python交互,与纯python代码相比没有任何改进。在

我不知道在指定变量类型时是否做错了什么。 还有其他解决方案,例如使用i**(1/2)或从clib导入函数sqrt,但我想了解为什么cython不能编译np.sqrt公司在这种情况下。在

谢谢。在


Tags: 代码importnumpyfordefasnpsqrt
1条回答
网友
1楼 · 发布于 2024-04-27 00:24:34

通常,当Cython看到python函数调用时,它被视为一个不透明的操作。Cython可能会省去一些调用开销,但否则它将生成与从python调用该函数完全相同的语义。在

某些numpy构造,如ndarray[dtype]类型,由Cython编译器进行特殊大小写,以生成更高效的代码。numpy-ufunc不是,所以to-cythonnp.sqrt只是另一个python函数,所以它除了调用python来运行它之外,什么也做不到。在

其他python加速器,例如numba将拦截对np.sqrt的调用,并将其重写为等效的低级代码。在

相关问题 更多 >