我对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;
}
然后我如何准备x
和y
并在Python中接收其返回的指针?希望有人能给我一些提示。
PS:似乎可以使用ctypes
,但我仍然在努力解决这个问题。
操作系统信息: Ubuntu 12.04,Python 2.7.6,gcc 4.6.3,SWIG 2.0.4,Intel / MKL 11.1