我的代码如下所示:
@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 不同,fn1 是即时编译的。不幸的是,我无法 jit fn2,因为它使用 Numba 无法识别的 scipy.interpolate.interp1d 函数。我该如何解决这个问题?
您不能从使用 jitted 的函数中调用非 jitted 函数nopython=True
。前者根据定义是一个 python 函数。你唯一真正的选择是编写你自己的版本interp1d
作为一个 jitted 函数(再次使用nopython=True
)。有时,通过查看原始 scipy 或 numpy 函数的源代码来删除所需的功能很简单。不幸的是,有时这非常困难。
以下库可能会有所帮助:
https://github.com/EconForge/interpolation.py https://github.com/EconForge/interpolation.py
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)