Документация обсуждает с использованием Numba cfunc
в качестве LowLevelCallable
аргумента scipy.integrate.quad
. Мне нужно то же самое с дополнительным параметром.
Я в основном пытаюсь сделать что-то вроде этого:
import numpy as np
from numba import cfunc
import numba.types
voidp = numba.types.voidptr
def integrand(t, params):
a = params[0] # this is additional parameter
return np.exp(-t/a) / t**2
nb_integrand = cfunc(numba.float32(numba.float32, voidp))(integrand)
Однако это не работает, поскольку params
должны быть voidptr
/void*
и они не могут быть преобразованы в double
. У меня есть следующее сообщение об ошибке:
TypingError: Failed at nopython (nopython frontend)
Invalid usage of getitem with parameters (void*, int64)
* parameterized
Я не нашел никакой информации о том, как извлекать значения из void*
в Numba. В C это должно быть что-то вроде a = *((double*) params)
- возможно ли сделать то же самое в Numba?