В настоящее время лучший способ иметь дело с функциями более высокого порядка в numba?Типы функций в 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'
Похоже, что был функциональным типом в предыдущих версиях, но был удален/переименован: http://numba.pydata.org/numba-doc/0.8/types.html#functions
On this page, они упоминают что-то, называемое numba.addressof(), которое кажется полезным, но снова датируется 4 годами.
Не могли бы вы включить, что 'f' (и код создает исключение) и полную трассировку? – MSeifert