網站首頁 編程語言 正文
簡介:numba是Anaconda公司開發的針對Python的開源JIT編譯器,用于提供Python版CPU和GPU編程,速度比原生Python快數十倍。numba是第三方庫,可以在運行時將Python代碼編譯為本地機器指令,而不會強制大幅度的改變普通的Python代碼,使得在部分場景下執行Python的效率得到飛速的提升。
工作原理對比:
Python文件執行過程
1、.py文件通過解釋器轉化為虛擬機可以執行的字節碼(.pyc);字節碼在虛擬機上執行,得到結果。
2、字節碼是一種只能運行在虛擬機上的文件,默認后綴.pyc,Python生成.pyc之后一般放在內存中繼續使用,并不是每次都將.pyc文件保存到磁盤上。
而在JIT(Just-In-Time)技術中,JIT編譯器將Python源代碼.py直接編譯成機器可以執行的機器語言(機器碼),就可以直接在CPU等硬件上運行。這樣,JIT就跳過了原來的虛擬機,執行速度幾乎與用C語言編程速度無差別。
numba是Anaconda公司開發的針對Python的開源JIT編譯器。谷歌開源的jax庫也是屬于jit編譯器之一,該模塊則主要應用于科學計算和機器學習方向。
安裝:如網絡限制,請繞道國內鏡像豆瓣源,清華源等。pip安裝第三方庫全攻略:普通安裝、安裝whl后綴文件、使用國內鏡像安裝
pip install numba
使用方法:
from numba import jit 對函數進行裝飾@jit(nopython=True)
注意事項:numba只符合部分場景,特殊場景無法使用。例如機器學習訓練數據時,不能簡單的進行裝飾使用,否則會拋出異常。
源碼:
from numba import jit import datetime def calc_sum1(loop): ? ? n = 0 ? ? for i in range(loop): ? ? ? ? for j in range(loop): ? ? ? ? ? ? n += j ? ? return n @jit(nopython=True) def calc_sum2(loop): ? ? n = 0 ? ? for i in range(loop): ? ? ? ? for j in range(loop): ? ? ? ? ? ? n += j ? ? return n @jit(nopython=True) def calc_sum2(loop): ? ? n = 0 ? ? for i in range(loop): ? ? ? ? for j in range(loop): ? ? ? ? ? ? n += j ? ? return n if __name__ == '__main__': ? ? print(datetime.datetime.now()) ? ? r1 = calc_sum1(10000) ? ? print(r1) ? ? print(datetime.datetime.now()) ? ? print("*" * 30) ? ? print(datetime.datetime.now()) ? ? r2 = calc_sum2(10000) ? ? print(r2) ? ? print(datetime.datetime.now())
結果對比:原始代碼執行需要花費5秒左右,而使用numba裝飾后僅需300毫秒左右,提升10倍有余。如果loop設置的參數更長,numba裝飾后執行的結果更佳。
原文鏈接:https://blog.csdn.net/hzblucky1314/article/details/122429569
相關推薦
- 2023-01-20 如何在Python中將字符串轉換為數組詳解_python
- 2022-08-13 微信公眾號--根據用戶的opneId發送模版消息
- 2023-02-05 c++?梅森數源碼示例解析_C 語言
- 2022-06-30 Python函數和文件操作詳情_python
- 2022-12-21 Android?ChipGroup收起折疊效果實現詳解_Android
- 2022-12-05 Go?reflect?反射原理示例詳解_Golang
- 2022-11-05 go?module化?import?調用本地模塊?tidy的方法_Golang
- 2022-06-22 Pandas數據結構中Series屬性詳解_python
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支