Python 3.x 是否有正确的实现?

Python 3.x 是否有正确的实现?,python-3.x,performance,numba,Python 3.x,Performance,Numba,不确定这里发生了什么,或者我是否正确使用了Numba,但是这里的速度没有达到预期的速度;请让我知道我错过了什么,让numba以应有的方式工作 输出显示运行文件(“######”):Numba->0.146546635999977472:Python->0.000471172998982346594 导入时间信息 从numpy导入日志,exp 从numba导入jit @jit(nopython=True) def Func(): n=100 b=[] for i in r

不确定这里发生了什么,或者我是否正确使用了Numba,但是这里的速度没有达到预期的速度;请让我知道我错过了什么,让numba以应有的方式工作

输出显示运行文件(“######”):Numba->0.146546635999977472:Python->0.000471172998982346594

导入时间信息 从numpy导入日志,exp 从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))
   
    
    return(i)

print(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))
   
    
    return(j)

print(timeit.timeit(Func,number=100))

速度差异的两个原因: (1) Numba必须在运行代码之前编译代码。尝试在计时器之外调用函数一次(强制编译),然后进行计时

(2) 你只做了100次迭代,这对一台计算机来说算不了什么。来自操作系统活动、计时器粒度等的噪音将使如此小的样本上的速度差变得微不足道。尝试进行10000次或更多的迭代(在解决编译问题之后)

编辑-如果OP将循环次数增加到1mm(参见下面的注释),那么代码几乎所有的时间都在调整数组大小,而不是进行任何计算

嵌入的数学函数(如exp和log)已经编译好了,numba没有什么可以使用的。Numba编译只能加速尚未编译的计算和循环。如前所述,循环不能被解开或并行执行,因为append()创建了一个串行依赖项


如果OP希望看到numba和普通python之间的差异,他应该寻找包含大量手动计算(而不是嵌入数学函数)的代码示例。计算mandlebrot集就是一个例子;numba进行这些计算的速度比单机版python快很多倍。

(1)编译并运行了多次代码以生成上述数字。我意识到在测量之前需要运行一次。(2)将N增加到一百万;同样的故事。你发布的不是原因,一定是其他原因。非常想知道它是什么?旁注:您不需要重新定义
Func2
:您可以使用
Func.py\u Func
访问未编译的python函数。