所以这就是我的代码:
@jit(nopython=True)
def sum_fn(arg1, arg2, ...argn):
.....
for i in xrange(len(arg2)): #For each bin
l, p = fn1(arg1, arg2...argn)
res = res + fn2(arg1, arg2, arg3)
return res
@jit(nopython=True)
def fn1(a1, a2,...an):
....
return r1, r2
def fn2(l_lk, l_pk, l_lvals):
f_i = interp1d(l_lk, l_pk,kind='linear') #Scipy.interpolate.interp1d
ftmp = fn3(f_i,l_lk,l_pk)
return 10**ftmp(l_lvals)
看起来调用fn2会产生错误,因为它没有被导入到numba编译过程中,这与fn1不同,后者是jitted。不幸的是,我不能jit fn2因为它使用了Numba无法识别的scipy.interpolate.interp1d函数。我该如何解决这个问题?
答案 0 :(得分:1)
您无法在与nopython=True
匹配的函数中调用非jitted函数。前者根据定义是一个python函数。您唯一真正的选择是将自己的interp1d
版本编写为jitted函数(再次使用nopython=True
)。有时通过查看原始scipy或numpy函数的源来删除所需的功能很简单。不幸的是,有时它很难。
以下库可能会有所帮助: