我在理解Python中使用Numbas向量化装饰器时遇到问题

时间:2018-09-12 15:45:58

标签: python numpy vectorization numba

我目前正在研究使用Numba来加快我的python软件的速度。我是这个概念的新手,目前正在尝试学习绝对基础。我现在停留的是:

我不明白,向量化装饰器的最大优点是什么

文档说明,装饰器用于将普通的python函数转换为Numpy ufunc。据我了解,ufunc的好处在于,它可以采用numpy数组(而不是标量)并提供广播等功能。

但是如果没有这个装饰器,我可以在网上找到的所有示例都可以轻松解决。

例如,这个例子来自numba文档。

@vectorize([float64(float64, float64)])
def f(x, y):
    return x + y

他们声称,现在该函数像numpy ufunc一样工作。但是,即使没有装饰器,还是不是吗?如果我只运行以下代码:

def f(x,y):
    return x+y

x = np.arange(10)
y = np.arange(10)

print(f(x,y))

那也很好。该函数已经接受标量以外类型的参数。

我在这里误会什么?

1 个答案:

答案 0 :(得分:0)

只需阅读以下几行文档即可:

  

您可能会问自己:“为什么我要经历这个过程,而不是使用@jit装饰器编译一个简单的迭代循环?”。答案是NumPy ufuncs会自动获得其他功能,例如减少,累积或广播。

例如,f.reduce(arr)将以arr的速度将f上的所有元素求和。