• 技术文章 >常见问题 >Python常见问题

    如何提升python运行速度

    silencementsilencement2020-02-05 14:03:47原创2228

    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

    是不是快了100多倍呢?

    那么下面就分享一下“为啥numba库的jit模块那么牛掰?”

    NumPy的创始人Travis Oliphant在离开Enthought之后,创建了CONTINUUM,致力于将Python大数据处理方面的应用。最近推出的Numba项目能够将处理NumPy数组的Python函数JIT编译为机器码执行,从而上百倍的提高程序的运算速度。

    Numba项目的主页上有Linux下的详细安装步骤。编译LLVM需要花一些时间。

    Windows用户可以从Unofficial Windows Binaries for Python Extension Packages下载安装LLVMPy、meta和numba等几个扩展库。

    下面我们看一个例子:

    import numba as nb
    from numba import jit
    @jit('f8(f8[:])')
    def sum1d(array):
     s = 0.0
     n = array.shape[0]
     for i in range(n):
      s += array[i]
     return s
    import numpy as np
    array = np.random.random(10000)
    %timeit sum1d(array)
    %timeit np.sum(array)
    %timeit sum(array)
    10000 loops, best of 3: 38.9 us per loop
    10000 loops, best of 3: 32.3 us per loop
    100 loops, best of 3: 12.4 ms per loop

    numba中提供了一些修饰器,它们可以将其修饰的函数JIT编译成机器码函数,并返回一个可在Python中调用机器码的包装对象。为了能

    将Python函数编译成能高速执行的机器码,我们需要告诉JIT编译器函数的各个参数和返回值的类型。我们可以通过多种方式指定类型信

    息,在上面的例子中,类型信息由一个字符串'f8(f8[:])'指定。其中'f8'表示8个字节双精度浮点数,括号前面的'f8'表示返回值类型,括号

    里的表示参数类型,'[:]'表示一维数组。因此整个类型字符串表示sum1d()是一个参数为双精度浮点数的一维数组,返回值是一个双精度

    浮点数。

    推荐学习《Python教程》!

    专题推荐:python
    上一篇:python打开中文文件名乱码怎么办 下一篇:python插件怎样卸载

    相关文章推荐

    • 学习编程Python用什么电脑• win7怎么用python• vs怎么写python代码• c语言如何运行python脚本

    全部评论我要评论

    © 2021 Python学习网 苏ICP备2021003149号-1

  • 取消发布评论
  • 

    Python学习网