微信开发中 ACCESS TOKEN 过期失效的解决方案详解
678
2022-08-31
Numba加速python代码
Numba 读取装饰函数的 Python 字节码,并将其与有关函数输入参数类型的信息结合起来,分析和优化代码,最后使用编译器库(LLVM)针对你的 CPU 生成量身定制的机器代码。每次调用函数时,都会使用此编译版本,来达到加速的目的。
原始代码
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
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~