Numba加速python代码
发布日期:2021-06-30 20:33:02
浏览次数:2
分类:技术文章
本文共 2218 字,大约阅读时间需要 7 分钟。
Numba 读取装饰函数的 Python 字节码,并将其与有关函数输入参数类型的信息结合起来,分析和优化代码,最后使用编译器库(LLVM)针对你的 CPU 生成量身定制的机器代码。每次调用函数时,都会使用此编译版本,来达到加速的目的。
1 原始代码
import mathimport timedef is_prime(num): if num == 2: return True if num <= 1 or not num % 2: return False for div in range(3, int(math.sqrt(num) + 1), 2): if not num % div: return False return Truedef run_program(N): total = 0 for i in range(N): if is_prime(i): total += 1 return totalif __name__ == "__main__": N = 10000000 start = time.time() total = run_program(N) end = time.time() print(f"total prime num is {total}") print(f"cost {end - start}s")
运行结果:
total prime num is 664579 cost 53.910285234451294s
2 导入 Numba 的 njit,再在函数上方放个装饰器 @njit
import mathimport timefrom numba import njit# @njit 相当于 @jit(nopython=True)@njitdef is_prime(num): if num == 2: return True if num <= 1 or not num % 2: return False for div in range(3, int(math.sqrt(num) + 1), 2): if not num % div: return False return True# @njit 相当于 @jit(nopython=True)@njit(parallel = True)def run_program(N): total = 0 for i in range(N): if is_prime(i): total += 1 return totalif __name__ == "__main__": N = 10000000 start = time.time() total = run_program(N) end = time.time() print(f"total prime num is {total}") print(f"cost {end - start}s")
运行结果:
total prime num is 664579 cost 3.5231616497039795s
3 加入prange 参数来并行计算
import mathimport timefrom numba import njit, prange# @njit 相当于 @jit(nopython=True)@njitdef is_prime(num): if num == 2: return True if num <= 1 or not num % 2: return False for div in range(3, int(math.sqrt(num) + 1), 2): if not num % div: return False return True# @njit 相当于 @jit(nopython=True)@njit(parallel = True)def run_program(N): total = 0 for i in prange(N): if is_prime(i): total += 1 return totalif __name__ == "__main__": N = 10000000 start = time.time() total = run_program(N) end = time.time() print(f"total prime num is {total}") print(f"cost {end - start}s")
运行结果:
total prime num is 664579 cost 1.087864875793457s
转载地址:https://liumin.blog.csdn.net/article/details/115893084 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
能坚持,总会有不一样的收获!
[***.219.124.196]2024年04月15日 10时00分07秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
ACM 2016 沈阳区域赛 E - Counting Cliques (dfs)
2019-04-30
ACM 2017 北京区域赛 J-Pangu and Stones(区间dp)
2019-04-30
HDU - 5643 King's Game (约瑟夫环变式)
2019-04-30
UVA - 1452 Jump (约瑟夫环变式)
2019-04-30
POJ - 3517 And Then There Was One (约瑟夫环变式)
2019-04-30
HDU - 2068 RPG的错排 (错排+组合数)
2019-04-30
CodeForces 591C Median Smoothing(思维 模拟)
2019-04-30
升级yosemite后java出错的解决
2019-04-30
mac || Linux 命令行下实现批量重命名
2019-04-30
java常用类 String面试题
2019-04-30
Windows10下的powershell美化教程
2019-04-30
利用ffmpeg合并音频和视频
2019-04-30
刷好老毛子系统进不了老毛子系统后台的解决办法
2019-04-30
Parallels Desktop 16 不能联网的解决办法
2019-04-30
SLAM中TUM数据集更改图片名字
2019-04-30
手把手教你--jquery chosen插件的使用和API(html下拉框美化)
2019-04-30
手把手教你--JAVA微信支付(H5支付)
2019-04-30