我可以从内联C代码(使用weave)调用python函数吗?
动机:我有一些代码想要优化,并且我已经在一个函数中发现了瓶颈。在我惯用的技巧之后,我通常会求助于scipy.weave.inline进行优化。不幸的是,在这种情况下,我的函数在内部循环中调用另一个python函数。我已经确定了内部函数不会导致速度问题,我真的不想用C编写它。
最小示例:
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()发布于 2011-05-09 03:36:00
这有点复杂,因为Weave没有自动编组参数和返回值的方法。你需要做更多的工作:
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'])输出:
90https://stackoverflow.com/questions/5929600
复制相似问题