来自MATLAB,我正在寻找一些在Python中创建函数的方法,这些函数派生自包装C函数。我遇到了Cython,ctypes,SWIG。我的意图不是通过任何因素来提高速度(尽管它肯定会有所帮助)。
有人可以为此目的推荐一个体面的解决方案。 编辑:这项工作最受欢迎/采用的方式是什么?
感谢。
答案 0 :(得分:1)
我发现weave适用于较短的功能并且界面非常简单。
为了让您了解界面的简单程度,这是一个示例(取自PerformancePython website)。请注意转换器如何为您处理多维数组转换(在本例中为Blitz)。
from scipy.weave import converters
def inlineTimeStep(self, dt=0.0):
"""Takes a time step using inlined C code -- this version uses
blitz arrays."""
g = self.grid
nx, ny = g.u.shape
dx2, dy2 = g.dx**2, g.dy**2
dnr_inv = 0.5/(dx2 + dy2)
u = g.u
code = """
#line 120 "laplace.py" (This is only useful for debugging)
double tmp, err, diff;
err = 0.0;
for (int i=1; i<nx-1; ++i) {
for (int j=1; j<ny-1; ++j) {
tmp = u(i,j);
u(i,j) = ((u(i-1,j) + u(i+1,j))*dy2 +
(u(i,j-1) + u(i,j+1))*dx2)*dnr_inv;
diff = u(i,j) - tmp;
err += diff*diff;
}
}
return_val = sqrt(err);
"""
# compiler keyword only needed on windows with MSVC installed
err = weave.inline(code,
['u', 'dx2', 'dy2', 'dnr_inv', 'nx', 'ny'],
type_converters=converters.blitz,
compiler = 'gcc')
return err