Python中的numba的基本應用!讓你的Python快一萬倍!
可以看到幾乎有 200 倍的差距,這當然是無法忍受的。為此,我們可以用vectorize來定義出類似於Ufunc的函式:
雖然還是慢了 2 倍左右,但已經好很多了
然後有幾點需要注意的地方:
* vectorize下的函式所接受的引數都是一個個的數而非整個陣列。所以上述add_with_vec的引數yy其實是輸入陣列y中的元素,而不是y本身。更詳細的說明可以參見官方文件)
* 可以看到當常數 c 是整數和是浮點數時、速度是不同的。個人猜測這是因為若常數 c 為整數,那麼實際運算時需要將它轉化為浮點數,從而導致速度變慢
* 上述程式碼中我們沒有顯式地定義函式的引數型別和返回型別,但我們可以預先定義。比如說,如果我確定常數 c 就是整數的話,我就可以這樣寫:
雖說在普通的 Python3.6.1 下、執行結果將如下:
73.5 µs ± 4.22 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)
21.2 µs ± 734 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)
似乎還變慢了;不過如果使用 Intel Distribution for Python 的話,會發現parallel版本甚至會比numpy原生的版本要稍快一些
這個栗子中的效能提升就是實打實的了。總之,使用parallel時不能一概而論,還是要做些實驗需要指出的是,vectorize中的引數target一共有三種取值:cpu(預設)、parallel和cuda。關於選擇哪個取值,官方文件上有很好的說明:
使用 jit(nogil=True) 實現高效併發(多執行緒)我們知道,Python 中由於有 GIL 的存在,所以多執行緒用起來非常不舒服。不過 numba 的 jit 裡面有一項引數叫 nogil,想來聰明的觀眾老爺們都猜到了它是幹什麼的了……
下面就來看一個栗子:
numba 的應用例項 —— 卷積與池化如果只想看效果的話倒沒什麼關係,不過如果想知道我具體在幹什麼的話,可以參見這篇文章
首先是卷積操作:
那麼程式的執行結果將會是:
281 ms ± 12.2 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
66.2 ms ± 2.32 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
可以看到這又快了 3 倍左右
接下來是池化操作(我們選用的是 MaxPool):
進群:125240963 即可獲取數十套PDF哦!
相關文章
- 利用 Numba 加速你的 Python 程式碼,使其變得像 C++ 一樣快PythonC++
- redis在python中的應用RedisPython
- python中 __call__ 的應用Python
- Numba編譯器的介紹與應用編譯
- 用 PyPy 讓你的 Python 程式碼執行得更快!Python
- 如何部署你的python web應用(二)PythonWeb
- python機器學習庫scikit-learn:SVR的基本應用Python機器學習VR
- python的應用Python
- Python的基本Python
- Python for Android,將你的Python應用打包為APK檔案PythonAndroidAPK
- 邊框檢測在 Python 中的應用Python
- 讓 python 執行地超快的 10 個方法Python
- 將你的應用遷移到 Python 3 的三個步驟Python
- 讓你的python程式同時相容python2和python3Python
- 用 Python 打造你的 EclipsePythonEclipse
- 讓你的 Python 程式碼優雅又地道Python
- 如何讓你的Python程式碼更加pythonic ?Python
- sqlalchemy在python中的使用(基本使用)一SQLPython
- 你的APP應用讓我變“胖”了APP
- Python中lambda表示式的語法與應用Python
- 詳解Python中sys模組的功能與應用Python
- 《探索Python Requests中的代理應用與實踐》Python
- Nginx 是如何讓你的快取延期的Nginx快取
- python爬蟲—基本的模組,你一定要懂!!Python爬蟲
- 你應該用 Python3.x 而非 Python2.x 的 20 個理由Python
- Python的基本語法Python
- 阿里讓你更清楚的認識自己的Python基礎阿里Python
- Python的sorted函式應用Python函式
- Promise的基本應用Promise
- Git的基本應用Git
- 讓你的Python程式碼擁有型別提示Python型別
- python中多執行緒和多程序的應用Python執行緒
- 接入Tengine,讓你的AI應用飛起來AI
- Web應用中快取的七種武器Web快取
- 三行Python程式碼,讓你的資料處理指令碼快別人4倍Python指令碼
- 最令人頭疼的Python問題:Python多執行緒在爬蟲中的應用Python執行緒爬蟲
- 讓你的 Node.js 應用跑得更快的 10 個技巧Node.js
- 讓你的應用支援新iPad的Retina螢幕iPad