Что касается входных данных, функции Numba со связью принимают неупакованные аргументы ключевых слов, и в моем ограниченном опыте, похоже, не слишком много снижается производительность за их использование. Например, если я напишу
@njit
def f(x, y, z):
return x + y - z
x, y, z = np.ones(100), np.zeros(100), np.full(100, 4.)
vals = {'x': np.ones(100), 'y': np.zeros(100), 'z': np.random.rand(100)}
затем, после первого запуска для компиляции, я получаю времена:
In [8]: %timeit f(**vals)
1.41 µs ± 17.5 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
In [9]: %timeit f(x, y, z)
1.44 µs ± 25.5 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
Я предполагаю, что dicts - ваш лучший / самый легкий вариант здесь, если, возможно, вы не будете выполнять кучу крошечных вызовов функций, а перегрузка функций станет главной.
Если вы хотите выводить материал в формате dicts, а не конвертировать его самостоятельно, это немного сложнее, так как я не думаю, что он еще поддерживается в режиме nopython. Возможно, в этот момент накладные расходы станут настолько существенными, что jitclasses будут иметь смысл.