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中调用机器码的wrapper对象。为了能够
要将 Python 函数编译成可以高速执行的机器码,我们需要告诉 JIT 编译器每个参数的类型和函数的返回值。我们可以通过多种方式指定类型字母
在上面的示例中,类型信息由字符串“f8(f8[:])”指定。其中'f8'代表一个8字节的双精度浮点数,括号前面的'f8'代表返回值类型,括号
参数类型中,'[:]'表示一维数组。因此,整个类型字符串表明sum1d()是一个双精度浮点数的一维数组,返回值为双精度
浮点数。
推荐学习《
》!
本文为原创文章,版权归知行编程网所有,欢迎分享本文,转载请保留出处!
你可能也喜欢
- ♥ Python 如何处理 Excel 文件10/20
- ♥ 如何在python中卸载包08/25
- ♥ python函数有返回值吗?09/23
- ♥ Python中的运算符总结10/20
- ♥ python pip安装失败11/12
- ♥ 如何在python中判断整数08/27
内容反馈