python 编译器参数_1. python 优化速度-更换编译器

numba初体验

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

安装

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会读取python字节码,结合函数的参数信息,分析和优化代码,然后使用LLVM编译器生成与机器匹配的机器码,之后每次调用函数时直接使用机器码就行了(其实就是JIT技术,与PyPy类似)

可以看到,使用numba装饰的函数快了大概上百倍。测试过程中还发现,当n比较小时,fib执行的时间比fib_with_jit短很多,但当n逐渐增大时,fib执行时间缓慢增长,而fib_with_jit几乎不变

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值