zoukankan      html  css  js  c++  java
  • numba初体验

    numba初体验

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


    ### 安装

    numba的安装方式很简单,使用pip或者anacoda都可以

    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装饰的函数快了大概上百倍。测试过程中还发现,当n比较小时,fib执行的时间比fib_with_jit短很多,但当n逐渐增大时,fib执行时间缓慢增长,而fib_with_jit几乎不变


    ### 为什么这么快?

    根据官方文档:numba会读取python字节码,结合函数的参数信息,分析和优化代码,然后使用LLVM编译器生成与机器匹配的机器码,之后每次调用函数时直接使用机器码就行了(其实就是JIT技术,与PyPy类似)

    官方文档地址:http://numba.pydata.org/numba-doc/latest/user/5minguide.html

  • 相关阅读:
    DAY21
    DAY20
    DAY19
    @Autowired注解和静态方法
    PageHelper.startPage和new PageInfo(list)的一些探索和思考
    escape()、encodeURI()、encodeURIComponent()区别详解
    每日日报29
    1dialog 表单最基本的封装
    mongoose
    数组
  • 原文地址:https://www.cnblogs.com/zzliu/p/11914977.html
Copyright © 2011-2022 走看看