如何提升python运行速度

图片[1]-如何提升python运行速度-uusu优素-乐高,模型,3d打印,编程

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

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

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

最原始的代码:

importtime
deffoo(x,y):
tt=time.time()
s=0
foriinrange(x,y):
s+=i
print('Timeused:{}sec'.format(time.time()-tt))
returns
print(foo(1,100000000))

结果

Timeused:6.779874801635742sec
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等几个扩展库。

下面我们看一个例子:

importnumbaasnb
fromnumbaimportjit
@jit('f8(f8[:])')
defsum1d(array):
s=0.0
n=array.shape[0]
foriinrange(n):
s+=array[i]
returns
importnumpyasnp
array=np.random.random(10000)
%timeitsum1d(array)
%timeitnp.sum(array)
%timeitsum(array)
10000loops,bestof3:38.9usperloop
10000loops,bestof3:32.3usperloop
100loops,bestof3:12.4msperloop

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

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

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

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

浮点数。

原文来自:https://www.py.cn
© 版权声明
THE END
喜欢就支持一下吧
点赞6 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容