Python не имеет ссылок, поэтому res = ...
на самом деле не присваивает выходной параметр, а вместо этого связывает имя res
.Я полагаю, что res указывает на неинициализированную память, поэтому ваш первый запуск дает, казалось бы, случайное значение.
Numba работает с этим, используя синтаксис среза ([:]
), который действительно мутирует res; вам также нужно объявитьтип в виде массива.Рабочая функция:
@guvectorize([(u1[:], i8[:])], '(n)->()')
def f(x, res):
res[:] = x.argmax()