zoukankan      html  css  js  c++  java
  • Numba:高性能Python编译器

    一、简介

    Numba是一个开源JIT编译器,它将Python和NumPy代码的子集转换为快速机器代码。

    二、主要特点

    加速Python功能

    Numba使用行业标准的LLVM编译器库在运行时将Python函数转换为优化的机器代码。 Python中的Numba编译数值算法可以接近C或FORTRAN的速度。
    您不需要替换Python解释器,运行单独的编译步骤,甚至安装C / C ++编译器。 只需将其中一个Numba装饰器应用到Python函数中,Numba就会完成剩下的工作。

    专为科学计算而打造

    Numba旨在与NumPy阵列和功能一起使用。 Numba为不同的阵列数据类型和布局生成专门的代码,以优化性能。特殊装饰器可以创建通用功能,可以像NumPy函数那样在NumPy数组上进行广播。
    Numba还可以与Jupyter笔记本电脑配合使用,实现交互式计算,以及分布式执行框架,如Dask和Spark。

    并行化您的算法

    Numba提供了一系列用于并行化CPU和GPU代码的选项,通常只需要很少的代码更改。


    便携式编译

    运送高性能Python应用程序,而不必担心二进制编译和打包。您的源代码仍然是纯Python,而Numba在运行时处理编译。我们在200多种不同的平台配置中持续测试Numba。
    Numba支持Intel和AMD x86,POWER8 / 9和ARM CPU,NVIDIA和AMD GPU,Python 2.7和3.4-3.7,以及Windows / macOS / Linux。大多数系统的预编译Numba二进制文件可用作conda软件包和pip可安装的轮子。


    三、示例

    python一直被病垢运行速度太慢,但是实际上python的执行效率并不慢,慢的是python用的解释器Cpython运行效率太差。

    “一行代码让python的运行速度提高100倍”这绝不是哗众取宠的论调。

    我们来看一下这个最简单的例子,从1一直累加到1亿。

    最原始的代码:

    import time
    def foo(x,y):
            tt = time.time()
            s = 0
            for i in range(x,y):
                    s += i
            print('Time used: {} sec'.format(time.time()-tt))
            return s
    
    print(foo(1,100000000))

    结果:

    Time used: 6.779874801635742 sec
    4999999950000000

    我们来加一行代码,再看看结果:

    from numba import jit
    import time
    @jit
    def foo(x,y):
            tt = time.time()
            s = 0
            for i in range(x,y):
                    s += i
            print('Time used: {} sec'.format(time.time()-tt))
            return s
    print(foo(1,100000000))

    结果:

    Time used: 0.04680037498474121 sec
    4999999950000000

    是不是快了100多倍呢?
    就因为使用了 numba库的jit模块。

  • 相关阅读:
    Javascript的调试利器:Firebug使用详解
    ASP.NET URL Rewriter 技术
    asp读取xml
    怎样提高WebService性能大数据量网络传输处理
    .net实现URL重写
    VS2005中,创建新网站ASP.NET,没有解决方案
    asp.net架构之请求处理过程:HttpModule,HttpHandler
    在应用程序级别之外使用注册为 allowDefinition='MachineToApplication' 的节是错误的
    正则表达式基础知识
    asp.net用url重写URLReWriter实现任意二级域名
  • 原文地址:https://www.cnblogs.com/bitquant/p/python-numba.html
Copyright © 2011-2022 走看看