Python運行速度慢這點是公認的!那麼如何加速Python代碼呢?

編程語言 Python C語言 GPU GCC 菜鳥帶你學編程 2018-11-29
Python運行速度慢這點是公認的!那麼如何加速Python代碼呢?

通過使用jit裝飾器,使用Numba非常容易:

Python運行速度慢這點是公認的!那麼如何加速Python代碼呢?

Python運行速度慢這點是公認的!那麼如何加速Python代碼呢?

正如你所知道的,在Python中,所有代碼塊都被編譯成字節碼:

Python運行速度慢這點是公認的!那麼如何加速Python代碼呢?

當然在學習Python的道路上肯定會困難,沒有好的學習資料,怎麼去學習呢?

所以小編準備了一份零基礎入門Python的學習資料。關注,轉發,私信“007”即可領取!

Python運行速度慢這點是公認的!那麼如何加速Python代碼呢?

Python運行速度慢這點是公認的!那麼如何加速Python代碼呢?

Python運行速度慢這點是公認的!那麼如何加速Python代碼呢?

Python運行速度慢這點是公認的!那麼如何加速Python代碼呢?

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代碼。

Python運行速度慢這點是公認的!那麼如何加速Python代碼呢?

但是,類型版本工作得更快。

Python運行速度慢這點是公認的!那麼如何加速Python代碼呢?

Python運行速度慢這點是公認的!那麼如何加速Python代碼呢?

編寫快速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。

相關推薦

推薦中...