我用PIL做圖像處理,我試圖將彩色圖像轉換爲灰度,所以我寫了一個Python函數要做到這一點,同時我知道PIL已經提供了convert
功能對此。性能問題,巨蟒對C
但我在Python寫的版本大約需要2秒完成了灰度化,而PIL的轉換幾乎瞬間。所以我讀了PIL代碼,發現我寫的算法基本相同,但 PIL的convert
是用C或C++編寫的。
那麼,這是使性能不同的問題?
我用PIL做圖像處理,我試圖將彩色圖像轉換爲灰度,所以我寫了一個Python函數要做到這一點,同時我知道PIL已經提供了convert
功能對此。性能問題,巨蟒對C
但我在Python寫的版本大約需要2秒完成了灰度化,而PIL的轉換幾乎瞬間。所以我讀了PIL代碼,發現我寫的算法基本相同,但 PIL的convert
是用C或C++編寫的。
那麼,這是使性能不同的問題?
是,編碼Python和C中的相同的算法,C實現的速度會更快。對於通常稱爲CPython的Python解釋器來說,這是絕對正確的。 PyPy的另一個實現使用JIT,因此可以實現令人印象深刻的速度,有時與C實現一樣快。但是在CPython下運行,Python會變慢。
如果你想要做的圖像處理,可以使用
的OpenCV(CV2),SimpleCV,與NumPy,SciPy的,用Cython,Numba ...
OpenCV的,SimpleCV SciPy的有很多圖像處理程序已經。
NumPy可以以c速度對數組執行操作。
如果你想在Python中的循環,你可以用用Cython編譯靜態聲明Python代碼到外部模塊。
或者您可以使用Numba做JIT轉換,它可以轉換你的Python代碼轉換爲機器的二進制代碼,並會給你靠近C速度。
感謝上述所有人,:-) – Alcott
在執行速度方面,C比Python快得多*在大多數情況下。這裏特別重要的東西就是循環(遍歷像素),這在Python中很慢。 – DanielB
一般來說,對於CPython的至少處理器密集型的程序應該用C或C++,並呼籲從Python擴展模塊如果性能是一個大問題 –
這與PIL沒有關係可言,閱讀有關虛擬機解釋型語言(通常稱爲解釋型語言,有時候是腳本語言)和由實際硬件解釋的語言(通常稱爲編譯語言)。 – mmgp