在numba中编译abs()比普通python函数慢

2024-09-27 00:21:38 发布

您现在位置:Python中文网/ 问答频道 /正文

这一切都是在jupyter笔记本上编程的,但是我没有在“正常”终端/空闲工作空间中找到不同的结果。我发现运行这个函数:

def __difference(a,b):
    return abs(a,b)

始终比:

^{pr2}$

编译的函数,这是_检查类型()(在这两种情况下,我的输入都是两个浮动):

__difference_numba (float64, float64)
--------------------------------------------------------------------------------
# File: <ipython-input-50-f6f52d4cccbf>
# --- LINE 1 --- 
# label 0

@jit(nopython=True)

# --- LINE 2 --- 

def __difference_numba(a, b):

# --- LINE 3 --- 
#   a = arg(0, name=a)  :: float64
#   b = arg(1, name=b)  :: float64
#   $0.1 = global(abs: <built-in function abs>)  :: Function(<built-in function abs>)
#   $0.4 = a - b  :: float64
#   del b
#   del a
#   $0.5 = call $0.1($0.4, kws=[], vararg=None, args=[Var($0.4, <ipython-input-50-f6f52d4cccbf> (3))], func=$0.1)  :: (float64,) -> float64
#   del $0.4
#   del $0.1
#   $0.6 = cast(value=$0.5)  :: float64
#   del $0.5
#   return $0.6

return abs(a-b)#np.abs(a - b)

=============================================================================

使用timeit到time函数的代码:

单元格定义参数(我尝试了不同的数字):

#test parameters
a=5.0
b=-2.5

用于测试numba实现和结果的单元:

%%timeit
#test numba

__difference_numba(a,b)

239 ns ± 6.03 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

用于测试正常python实现和结果的单元:

%%timeit
#test python

__difference(a,b)

156 ns ± 0.823 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)

Tags: 函数testinputreturndefipythonlineabs
1条回答
网友
1楼 · 发布于 2024-09-27 00:21:38

我相信您看到的是分派到numba代码中的开销(而不是编译的abs函数的速度),因为函数中所做的工作非常简单。在

通常,您不会将这样一个微不足道的调用分离到一个函数中,尽管从另一个numba jitted函数中调用_difference_numba可能是由编译器内联的。不管怎样,您需要在numba代码中停留的时间比开销长,才能开始看到纯python代码和numba jitted代码之间的性能差异。像这样跨越numba/python边界来回调用并不能克服开销。在

相关问题 更多 >

    热门问题