還有一些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