np.exp比np.e慢得多?

Jam*_*mes 5 python optimization numpy

In [49]: timeit.timeit("np.exp(100)", setup="import numpy as np")
Out[49]: 1.700455904006958

In [50]: timeit.timeit("np.e**100", setup="import numpy as np")
Out[50]: 0.16629505157470703
Run Code Online (Sandbox Code Playgroud)

是否有任何理由使用np.e**100的CPython实现比使用numpy版本慢得多?numpy版本不应该更快,因为它被推到C代码?

Mar*_*ius 6

一个明显的原因是将np.exp其设置为处理数组,并且在计算输入的类型/尺寸方面可能涉及一些开销。尝试以下情况,您可能会发现差异减少或消失:

timeit.timeit("np.exp(x)", 
              setup="import numpy as np; x = np.array([99, 100, 101])")
# This actually seems to be faster than just calculating
#   it for a single value
Out[7]: 1.0747020244598389

timeit.timeit("[np.e**n for n in x]", 
              setup="import numpy as np; x = [99, 100, 101]")
Out[8]: 0.7991611957550049
Run Code Online (Sandbox Code Playgroud)