【发布时间】:2017-06-07 13:24:59
【问题描述】:
目前在 numba 中处理高阶函数的最佳方法是什么?
我实现了secant method:
def secant_method_curried (f):
def inner (x_minus1, x_0, consecutive_tolerance):
x_new = x_0
x_old = x_minus1
x_oldest = None
while abs(x_new - x_old) > consecutive_tolerance:
x_oldest = x_old
x_old = x_new
x_new = x_old - f(x_old)*((x_old-x_oldest)/(f(x_old)-f(x_oldest)))
return x_new
return numba.jit(nopython=False)(inner)
问题是没有办法告诉 numba f 是 doube(double),所以上面的代码与 nopython=True 中断:
TypingError: Failed at nopython (nopython frontend)
Untyped global name 'f'
在以前的版本中似乎有一个 FunctionType,但被删除/重命名:http://numba.pydata.org/numba-doc/0.8/types.html#functions
On this page,他们提到了一个叫做 numba.addressof() 的东西,这似乎很有帮助,但又可以追溯到 4 年前。
【问题讨论】:
-
您能否包括
f是什么(代码产生异常)和完整的回溯?