首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Numba正确的实施?

Numba正确的实施?
EN

Stack Overflow用户
提问于 2020-11-20 21:24:47
回答 1查看 50关注 0票数 0

不知道这里发生了什么,或者我是否正确地使用了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))

EN

回答 1

Stack Overflow用户

发布于 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做这些计算快很多倍。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64937143

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档