python加速之numpy与numba

最近在看深度学习加速计算时,发现了numba加速库,声称能加速python运行速速度高达百倍

首先是测速的工具

常规的测速工具是time.time(),但是在internet上看到有人说,这个不准确,python有个强大的代码测速库:timeit,于是就斗胆用这个试试。
然后就开始造一个例子:那就求一个二维数组的和吧!
首先用python原生的列表:

def go_pylist():
    a = list(range(100))
    b = list(range(100))
    c = []
    for i in range(len(a)):
        a[i] = i ** 2
        b[i] = i ** 3
        c.append(a[i] + b[i])
    return c

然后定义numpy:

def go_numpy():
    x = np.arange(100)
    y = np.arange(100)
    z = x**2 + y**3
    return z

最后numba,语法倒挺简单,用jit装饰器就可以了:

@jit(nopython=True) # jit,numba装饰器中的一种
def go_numba(): # 首次调用时,函数被编译为机器代码
    x = np.arange(100)
    y = np.arange(100)
    z = x**2 + y**3
    return z

利用timeit计算耗时结果(每个函数跑他个100遍):

timeit的number参数:表示当前测速的程序运行几遍
print('python List:', timeit('go_pylist()', 'from __main__ import go_pylist', number=100))
print('python numpy:', timeit('go_numpy()', 'from __main__ import go_numpy', number=100))
print('python numba + numpy 首次编译:', timeit('go_numba()', 'from __main__ import go_numba', number=100))
print('python numba + numpy 再次运行:', timeit('go_numba()', 'from __main__ import go_numba', number=100))

迫不及待看结果喽:

python List: 0.005218099999183323
python numpy: 0.0003794999975070823
python numba + numpy 首次编译: 0.8580956000005244
python numba + numpy 再次运行: 0.00011240000094403513

差别不大,我再跑1000遍:

python List: 0.05830569999670843
python numpy: 0.00400420000005397
python numba + numpy 首次编译: 0.975803299999825
python numba + numpy 再次运行: 0.0008096999990812037

一给我里giao giao:

numpy提速已经很离谱啦!!!但是numba好像没那么叼哎!
第一次运行numba,耗时尽然普遍超过python原生列表和numpy,我叹为观止!
再次运行就遥遥领先。numba运行两次才能提速,那两次加起来不是更耗时么??谁能给我解答一下?

PS:忽略产生数据的速度差异了,而且,我好像混淆了计算加速和运行代码加速,不过没啥影响,numba和numpy对比就可以了!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值