我目前正在研究使用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))
那也很好。该函数已经接受标量以外类型的参数。
我在这里误会什么?
答案 0 :(得分:0)
只需阅读以下几行文档即可:
您可能会问自己:“为什么我要经历这个过程,而不是使用@jit装饰器编译一个简单的迭代循环?”。答案是NumPy ufuncs会自动获得其他功能,例如减少,累积或广播。
例如,f.reduce(arr)
将以arr
的速度将f
上的所有元素求和。