Python執行速度慢這點是公認的!那麼如何加速Python程式碼呢?
阿新 • • 發佈:2018-12-06
通過使用jit裝飾器,使用Numba非常容易:
正如你所知道的,在Python中,所有程式碼塊都被編譯成位元組碼:
當然在學習Python的道路上肯定會困難,沒有好的學習資料,怎麼去學習呢?
所以小編準備了一份零基礎入門Python的學習資料。關注,轉發,私信“007”即可領取!
進群:548377875 即可獲取數十套PDF的獲取方式哦!
Python numba 體系結構
Numba的優勢:
- 易用性
- 自動並行化
- 支援numpy操作和物件
- GPU支援
Numba的劣勢:
- 多層的抽象使得除錯和優化變得非常困難
- 在nopython模式下無法與Python及其模組進行互動
- 有限的類支援
Cython
取代分析位元組碼和生成IR,Cython使用Python語法的超集,它後來轉換成C程式碼。在使用Cython時,基本上是用高階Python語法編寫C程式碼。
在Cython中,通常不必擔心Python包裝器和低階API呼叫,因為所有互動都會自動擴充套件到合適的C程式碼。
與Numba不同,所有的Cython程式碼應該在專門檔案中與常規Python程式碼分開。Cython將這些檔案解析並轉換成C程式碼,然後使用提供的C編譯器 (例如, gcc)編譯它。
Python程式碼已經是有效的Cython程式碼。
但是,型別版本工作得更快。
編寫快速Cython程式碼需要理解C和Python內部結構。如果你熟悉C,你的Cython程式碼可以執行得和C程式碼一樣快。
Cython的優勢:
- 通過Python API的使用控制
- 與C/C++庫和C/C++程式碼的簡單介面
- 並行執行支援
- 支援Python類,在C中提供面向物件的特性
Cython的劣勢:
- 學習曲線
- 需要C和Python內部專業技術
- 模組的組織不方便
Numba 對 Cython
就個人而言,我更喜歡小專案和ETL實驗用Numba。你可以將其插入現有專案中。如果我需要啟動一個大專案或為C庫編寫包裝器,我將使用Cython,因為它提供更多的控制和更容易除錯。
此外,Cython是許多庫的標準,如pandas、scikit-learn、scipy、Spacy、gensim和lxml。