爱上python系列------python性能(十三):忌用for循环

一直都在想标量和向量计算为啥速度不一样,直到看到这个文章

接下来试验一下:

用for循环:

import  numpy as np
ls=[i+8 for i in range(1<<25)]
arrs=np.array(ls)

#定义一个对每个元素都加8的函数
def add_8(nums):
    for i in range(len(nums)):
        nums[i]+=8
    return nums
%timeit add_8(arrs)

结果:9.1 s ± 308 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

不用for循环:

import  numpy as np
ls=[i+8 for i in range(1<<25)]
arrs=np.array(ls)
%timeit arrs+8

结果:30.9 ms ± 27.5 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)

差距也太大了

用for循环就是一个一个标量计算,而使用通用函数(这里是加法)相当于是向量计算

不过,要是想使用for 循环一定要使用numba

看下效果吧

import  numpy as np
from numba import jit
ls=[i+8 for i in range(1<<25)]
arrs=np.array(ls)

#定义一个对每个元素都加8的函数
@jit(nopython=True)
def add_8(nums):
    for i in range(len(nums)):
        nums[i]+=8
    return nums
%timeit add_8(arrs)

结果:17.6 ms ± 57.2 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

效果比通用函数斗牛,numba成神了

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值