还有一些numpy,在处理“数组操作”(有时也称为矢量操作,但我觉得这个术语与SIMD术语混淆)时可以相当快。如果你决定使用cython路由,你可能需要numpy,所以如果这个算法不是太复杂,你可能需要先看看numpy是否足够好。
请注意,您可以在此处选择两种不同的路线。你可以使用subprocess
,它基本上对你写的其他程序发出系统调用。这很慢,因为您需要启动新进程并将数据发送到进程中,然后从进程中读回数据。换句话说,每次调用都会多次复制数据。第二条路线是从python调用C函数。由于Cpython(参考和最常见的python实现)是用C语言编写的,所以您可以创建C扩展。它们基本上是遵循某个API的编译库。然后Cpython可以加载这些库并使用里面的函数,传递指向数据的指针。通过这种方式,数据实际上不会被复制 - 您正在使用与您在C中使用的python中相同的内存块。这里的缺点是C API有点复杂。这就是第三方扩展和现有库进来的地方(numpy,cython,ctypes等)。它们都有不同的方式来推动计算int C函数,而不必担心C API。 Numpy删除循环,以便可以快速地添加,减去,乘以数组(其他许多事情)。 Cython
将python代码转换为C,然后您可以编译和导入 - 通常为了获得速度,您需要提供其他提示以允许cython优化生成的代码,因为您必须重新指定C函数,因此有点脆弱原型,但除此之外,只要您可以将库编译为共享对象,就非常容易...该列表可以继续。
另请注意,如果你不使用numpy,你可能想看看pypy。它声称比Cpython更快地运行Python代码。
具体来说,您一直在阅读[本页](http://docs.python.org/extending/extending.html)? – 2012-07-10 19:00:17
可能的重复[如何连接Python和C程序?](http://stackoverflow.com/questions/4743748/how-do-i-connect-a-python-and-ac-program) – senderle 2012-07-10 19:12:06
请参阅尤其是[这个答案](http://stackoverflow.com/a/4743943/577088)涵盖了色域。 – senderle 2012-07-10 19:13:59