ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

1. python 优化速度-更换编译器

2021-01-21 13:01:48  阅读:302  来源: 互联网

标签:f1 f2 python numba fib 编译器 jit time 更换


numba初体验

今天在知乎上发现了一个很神奇的包numba,可以用jit的方式大幅提高计算型python代码的效率,一起来看一下

安装

pip3 install numba

注意:numba仅支持python3.5以上的版本

使用

numba的使用也很简单,使用numba.jit装饰锂电函数就可以了

以下是一个简单的demo

import time
import numba
from functools import wraps


def timeit(f):
    @wraps(f)
    def wrapper(*args, **kwargs):
        enter_time = time.time()
        ret = f(*args, **kwargs)
        print("{}:{}".format(f.__name__, time.time()-enter_time))
        return ret
    return wrapper


@timeit
def fib(n):
    f1 = f2 = 1
    for i in range(1, n):
        f1, f2 = f2, f1 + f2
    return f2


@timeit
@numba.jit
def fib_with_jit(n):
    f1 = f2 = 1
    for i in range(1, n):
        f1, f2 = f2, f1 + f2
    return f2


if __name__ == '__main__':
    fib_with_jit(2000000)	# fib_with_jit:0.11314105987548828
    fib(2000000)	# fib:50.43636465072632

为什么这么快?

根据官方文档:numba会读取python字节码,结合函数的参数信息,分析和优化代码,然后使用LLVM编译器生成与机器匹配的机器码,之后每次调用函数时直接使用机器码就行了(其实就是JIT技术,与PyPy类似)
可以看到,使用numba装饰的函数快了大概上百倍。测试过程中还发现,当n比较小时,fib执行的时间比fib_with_jit短很多,但当n逐渐增大时,fib执行时间缓慢增长,而fib_with_jit几乎不变

标签:f1,f2,python,numba,fib,编译器,jit,time,更换
来源: https://www.cnblogs.com/ludada/p/14307402.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有