通過使用jit裝飾器,使用Numba非常容易:
正如你所知道的,在Python中,所有代碼塊都被編譯成字節碼:
當然在學習Python的道路上肯定會困難,沒有好的學習資料,怎麼去學習呢?
所以小編準備了一份零基礎入門Python的學習資料。關注,轉發,私信“007”即可領取!
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。
相關推薦
'Python什麼情況下會生成 pyc文件?通過pyc文件瞭解Python運行原理'
"由於最近一位同學在做分佈式計算時,部分模塊只把 pyc文件拷貝部署至遠程計算節點,導致主節點程序更新後,計算節點拋出了錯誤異常,於是有了這篇文章...示例如下,有兩個py模塊,testops.py 與 testops_imported.py模塊。我們先來看 testops...
'寫python爬蟲,不會正則怎麼行呢?另贈學習資料'
"導讀:正則在各語言中的使用是有差異的,本文以 Python 3 為基礎。本文主要講述的是正則的語法,對於 re 模塊不做過多描述,只會對一些特殊地方做提示。很多人覺得正則很難,在我看來,這些人一定是沒有用心。其實正則很簡單,根據二八原則,我們只需要懂 20% 的內容就可以...
'如何將一個 Python 函數進行模塊化封裝'
"使用 Python 函數來最大程度地減少重複任務編碼工作量。-- Seth Kenlon(作者)你是否對函數、類、方法、庫和模塊等花哨的編程術語感到困惑?你是否在與變量作用域鬥爭?無論你是自學成才的還是經過正式培訓的程序員,代碼的模塊化都會令人困惑。但是類和庫鼓勵模塊化代...
'使用Python進行機器學習的假設檢驗(附鏈接&代碼)'
"作者:Jose Garcia翻譯:張睿毅校對:張一豪本文約3800字,建議閱讀10分鐘。作者給出了假設檢驗的解讀與Python實現的詳細的假設檢驗中的主要操作。也許所有機器學習的初學者,或者中級水平的學生,或者統計專業的學生,都聽說過這個術語,假設檢驗。我將簡要介紹一下這...
推薦中...