爱上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成神了

猜你喜欢

转载自blog.csdn.net/zhou_438/article/details/109339714
今日推荐