首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么Cython Decorator版本比Cython Pyx版本慢?

为什么Cython Decorator版本比Cython Pyx版本慢?
EN

Stack Overflow用户
提问于 2013-12-10 10:15:58
回答 1查看 376关注 0票数 2

我正在尝试用Cython编写阶乘函数的各种方法。首先,我在iPython笔记本中尝试了pyx文件版本。

代码语言:javascript
复制
%%file pyxfact.pyx
cdef long pyxfact(long n):
    if n <=0:
        return 1
    else:
        return n * pyxfact(n-1)

def fact(long n):
    return pyxfact(n)

然后我尝试了同样的方法,至少我认为是这样,在Cython装饰器中,如下所示:

代码语言:javascript
复制
%%file cydecofact.py
import cython

@cython.cfunc # equivalent to cdef, while @cython.ccall is equivalent to cpdef
@cython.returns(cython.long)
@cython.locals(n=cython.long)
def deco_fact(n):
    if n <=0:
        return 1
    else:
        return n * deco_fact(n-1)

@cython.locals(n=cython.long)
def fact(n):
    return deco_fact(n)

令我惊讶的是,这两个版本有巨大的运行时间差异:

代码语言:javascript
复制
%timeit -n 10000 pyxfact.fact(10)
%timeit -n 10000 cydecofact.fact(10)

10000 loops, best of 3: 219 ns per loop
10000 loops, best of 3: 2 µs per loop
EN

回答 1

Stack Overflow用户

发布于 2015-08-11 14:05:25

您需要一个@cython.compile来实际编译代码。但是,看起来@cython.compile既不支持cython.cfunc,也不支持递归。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20484804

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档