代碼乾貨 | Python高性能計算庫——Numba

本文來源於阿里雲-雲棲社區,原文點擊這裏


最近我在觀看一些SciPy2017會議的視頻,偶然發現關於Numba的來歷--講述了那些C++的高手們因爲對Gil ForsythLorena Barba失去信心而編寫的一個庫。雖然本人覺得這個做法有些不妥,但我真的很喜歡他們所分享的知識。因爲我發現自己正在受益於這個庫,並且從Python代碼中獲得了令人難以置信的表現,所以我覺得應該要寫一些關於Numba庫的介紹性文章,也可能會在將來添加一系列小的更多類似教程的文章。


 1.那麼到底什麼是Numba?

Numba是一個庫,可以在運行時將Python代碼編譯爲本地機器指令,而不會強制大幅度的改變普通的Python代碼(稍後再做說明)。翻譯/魔術是使用LLVM編譯器完成的,該編譯器是相當活躍的開源社區開發的。

Numba最初是由Continuum Analytics內部開發,此公司也開發了著名的Anaconda,但現在它是開源的。核心應用領域是math-heavy(密集數學?重型數學?)和array-oriented(面向數組)的功能,它們在本地Python中相當緩慢。想象一下,在Python中編寫一個模塊,必須一個元素接着一個元素的循環遍歷一個非常大的數組來執行一些計算,而不能使用向量操作來重寫。這是很不好的主意,是吧?所以“通常”這類庫函數是用C / C ++或Fortran編寫的,編譯後,在Python中作爲外部庫使用。Numba這類函數也可以寫在普通的Python模塊中,而且運行速度的差別正在逐漸縮小。


 2.怎麼才能get到Numba呢?

安裝Numba的推薦方法是使用conda包管理

conda install numba

你也可以用pip安裝Numba,但是最新版本的發佈才一天之久。但是,只要你能夠使用conda,我會推薦使用它,因爲它能夠爲你安裝例如CUDA工具包,也許你想讓你的Python代碼GPU就緒(當然,這也是有可能的!)。


 3.如何使用Numba呢?

使用它的要求不多。基本上,你寫一個自己的“普通”的Python函數,然後給函數定義添加一個裝飾(如果你不是很熟悉裝飾器,讀一下關於thisthat)。你可以使用不同類型的裝飾器,但@jit可能是剛開始的選擇之一。其他裝飾器可用於例如創建numpy通用功能@vectorize或編寫將在CUDA GPU上執行的代碼@cuda。我不會在這篇文章中介紹這些裝飾。現在,讓我們來看看基本的步驟。他們提供的代碼示例是2d數組的求和函數,以下是代碼:

 展開全文

發佈了2 篇原創文章 · 獲贊 52 · 訪問量 16萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章