在Python中调用的C函数的参数

时间:2014-01-23 19:45:23

标签: python c swig ctypes

我对Python和C相对较新。我想要做的是结合C的效率和Python的简单性。

我的任务是做一些大规模的计算,在这种情况下,Matlab(已经使用了很长时间)都无法支持。因此,在intel MKL的帮助下,我考虑转向C以获得更高的效率。但是,在C中进行数据可视化并不容易,我认为在Python / Matplotlib中做得更好(Matlab可以这样做,但我不想使用它: - )。

首先,我可以将C文件编译成可执行文件,然后通过os.system("foo")在Python中调用它。但是为我的模型调整参数(太多情况)并不方便。 main(int argc, char *argv)之类的内容可能会有所帮助。但我认为这还不够好。

然后,我找到了SWIG。通过将C文件编译和包装为.so文件,我可以在Python中执行某些操作,

>>> import foo
>>> foo.my_mod(7, 2)

其中foo来自SWIG生成的_foo.so。函数my_mod在c文件中定义为

int my_mod(int x, int y) {
  return (x%y);
}

直到现在,一切都还好。但是,如果他们的参数包含数组/指针,我真的不知道如何调用我的C函数,因为我必须在Python中定义C的输入。例如,如果我将上述C函数更改为,

int *my_mod(int *x, int *y) {
  blablabla;
}

然后我如何准备xy并在Python中接收其返回的指针?希望有人能给我一些提示。

PS:似乎可以使用ctypes,但我仍然在努力解决这个问题。

操作系统信息: Ubuntu 12.04,Python 2.7.6,gcc 4.6.3,SWIG 2.0.4,Intel / MKL 11.1

0 个答案:

没有答案