编辑补充:我不认为 numba 基准是公平的,下面的注释
我正在尝试对以下用例的数值处理数据的不同方法进行基准测试:
换句话说,不需要系列和数据框的完全通用性,尽管它们被包含在 b/c 中,但它们仍然是封装数据的便捷方式,并且经常有预处理或后处理确实需要熊猫的通用性numpy 数组。
问题:基于此用例,以下基准是否合适,如果不合适,我该如何改进它们?
# importing pandas, numpy, Series, DataFrame in standard way
from numba import jit
nobs = 10000
nlines = 100
def proc_df():
df = DataFrame({ 'x': np.random.randn(nobs),
'y': np.random.randn(nobs) })
for i in range(nlines):
df['z'] = df.x + df.y
return df.z
def proc_ser():
x = Series(np.random.randn(nobs))
y = Series(np.random.randn(nobs))
for i in range(nlines):
z = x + y
return z …Run Code Online (Sandbox Code Playgroud) 与使用纯 python 相比,使用 numba 会产生更快的程序:
现在看来,纯 python 上的 numba 甚至(大部分时间)都比 numpy-python 快,例如https://jakevdp.github.io/blog/2015/02/24/optimizing-python-with- numpy 和 numba/。
根据https://murillogroupmsu.com/julia-set-speed-comparison/,在纯 python 代码上使用的 numba 比在使用 numpy 的 python 代码上使用的速度快。这通常是真的吗?为什么?
在/sf/answers/1816668031/中解释了为什么纯 python 上的 numba 比 numpy-python 更快:numba 看到更多的代码并且有更多的方法来优化代码,而 numpy 只看到一小部分。
这是否回答了我的问题?在使用 numpy 时,我是否会妨碍 numba 完全优化我的代码,因为 numba 被迫使用 numpy 例程而不是找到更优化的方法?我曾希望 numba 会意识到这一点,如果它没有好处,就不要使用 numpy 例程。然后它会使用 numpy 例程,只是它是一个改进(毕竟 numpy 已经过很好的测试)。毕竟“对 NumPy 数组的支持是 Numba 开发的重点,目前正在进行广泛的重构和改进。”