一直都在想标量和向量计算为啥速度不一样,直到看到这个文章
接下来试验一下:
用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成神了