Python 中带有 numba 的简单求和函数无法计算

Simple sum-function in Python with numba doesn't compute

我正在尝试学习 Python 和 Numba,但我无法弄清楚为什么以下代码无法在 IPython/Jupyter 中计算:

from numba import *

sample_array = np.arange(10000.0)

@jit('float64(float64, float64)')
def sum(x, y):
    return x + y

sum(sample_array, sample_array)

TypeError Traceback (most recent call last) in () ----> 1 sum(sample_array, sample_array)

C:\Users***\AppData\Local\Continuum\Anaconda\lib\site-packages\numba\dispatcher.pyc in _explain_matching_error(self, *args, **kws) 201 msg = ("No matching definition for argument type(s) %s" 202 % ', '.join(map(str, args))) --> 203 raise TypeError(msg) 204 205 def repr(self):

TypeError: No matching definition for argument type(s) array(float64, 1d, C), array(float64, 1d, C)

您正在传递数组,但您的 jit 签名需要标量浮点数。请尝试以下操作:

@jit('float64[:](float64[:], float64[:])')
def sum(x, y):
    return x + y

我的建议是看看你是否可以不指定类型而只使用裸 @jit 装饰器,它将在运行时进行类型推断,你可以更灵活地处理输入。例如:

@jit(nopython=True)
def sum(x, y):
    return x + y

In [13]: sum(1,2)
Out[13]: 3

In [14]: sum(np.arange(5),np.arange(5))
Out[14]: array([0, 2, 4, 6, 8])

我的经验是添加类型很少会带来任何性能优势。

在我的例子中,这是因为我传递的是二维数组(矩阵),但它期望的是一维数组(向量)