首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用scipy.weave从内联C调用Python函数

使用scipy.weave从内联C调用Python函数
EN

Stack Overflow用户
提问于 2011-05-09 03:02:17
回答 1查看 3.4K关注 0票数 8

我可以从内联C代码(使用weave)调用python函数吗?

动机:我有一些代码想要优化,并且我已经在一个函数中发现了瓶颈。在我惯用的技巧之后,我通常会求助于scipy.weave.inline进行优化。不幸的是,在这种情况下,我的函数在内部循环中调用另一个python函数。我已经确定了内部函数不会导致速度问题,我真的不想用C编写它。

最小示例:

代码语言:javascript
复制
from weave import inline

def foo(x):
    return x*2

def bar():
    a = 0
    for i in xrange(10):
        a += foo(i)
    return a

def bar_weave():
    code = """
    int a = 0;
    for (int i=0;i<10;++i){
        a += foo(i);  //<<-- what I'd like to do, but doesn't work
    }
    return_val = a;"""
    return inline(code,['foo'])

print bar()
print bar_weave()
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-05-09 03:36:00

这有点复杂,因为Weave没有自动编组参数和返回值的方法。你需要做更多的工作:

代码语言:javascript
复制
def bar_weave():
    code = """
    int a = 0;
    for (int i=0;i<10;++i){
        py::tuple arg(1);
        arg[0] = i;
        a += (int) foo.call(arg);
    }
    return_val = a;
    """
    return inline(code,['foo'])

输出:

代码语言:javascript
复制
90
票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5929600

复制
相关文章

相似问题

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