首页 文章

Python中使用numba的简单求和函数无法计算

提问于
浏览
4

我正在尝试学习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(最近一次调用最后一次)in()----> 1 sum(sample_array,sample_array)C:\ Users *** \ AppData \ Local \ Continuum \ Anaconda \ lib \ site-packages \ numba \ dispatcher . _explain_matching_error中的pyc(self,* args,** kws)201 msg =(“参数类型没有匹配的定义%s”202%',' . join(map(str,args))) - > 203 raise TypeError(msg)204 205 def repr(self):TypeError:参数类型数组(float64,1d,C),数组(float64,1d,C)没有匹配的定义

1 回答

  • 2

    您正在传入数组,但您的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])
    

    我的经验是,添加类型很少会带来任何性能上的好处 .

相关问题