不知道这里发生了什么,或者我是否正确地使用了Numba,但是这里的速度没有达到预期的要求;请告诉我我错过了什么,让numba按照它应该的方式工作。
输出显示runfile('#####):Numba-> 0.14654635999977472 :Python-> 0.00047117299982346594
从numpy导入日志导入
时间,从numba导入jit导入
@jit(nopython=True) def Func():n=100 b=[] for i in range(0,n):b.append(log(i/2+52)**2)*exp(.05*10))返回(I)打印(timeit.timeit(Func,number=100)) def Func2():n=100 c=[] for j in range(0,( n):c.append(log((j/2+52)**2)*exp(.05*10))返回(J)打印(timeit.timeit(Func,number=100))
发布于 2020-11-21 04:07:54
速度差异的两个原因:(1) Numba必须在运行代码之前编译代码。尝试在计时器之外调用一次函数(强制编译),然后执行计时。
(2)您只执行100次迭代,这对计算机来说是没有意义的。在这样一个小样本上,OS活动的噪声、定时器的粒度等会使速度差变小。尝试执行10,000个或更多的迭代(在解决编译问题之后)
编辑-如果OP将循环增加到1mm迭代(请参阅下面的注释),那么代码将花费几乎所有的时间调整数组大小,而不做任何计算。
嵌入式数学函数(如exp和log)已经编译完毕,numba没有什么可处理的。Numba编译只能加快尚未编译的计算和循环。正如所写的,循环不能并行地展开或执行,因为append()创建了串行依赖项。
如果OP想看到numba和普通python之间的区别,他应该寻找大量手工计算的代码示例(而不是嵌入的数学函数)。计算mandlebrot集就是一个例子;numba将比单独的python做这些计算快很多倍。
https://stackoverflow.com/questions/64937143
复制相似问题