Я пытаюсь скомпилировать следующую функцию с помощью Numba:
@njit(fastmath=True, nogil=True)
def generate_items(array, start):
array_positions = np.empty(SIZE, dtype=np.int64)
count = 0
while count < SIZE - start:
new_array = mutate(np.empty(0, dtype=np.uint8))
if len(new_array) > 0:
array_positions[count] = len(array) # <<=== FAILS HERE
array = np.append(array, np.append(new_array, 255))
count += 1
return array, array_positions
Но это не удается в указанной строке выше с этим сообщением об ошибке:
numba.core.errors.TypingError: Failed in nopython mode pipeline (step: nopython frontend)
Cannot unify array(uint8, 1d, C) and array(int64, 1d, C) for 'array.3', defined at ...
Что не похоже чтобы иметь смысл, поскольку я просто назначаю int
(результат на len
) массиву, который имеет dtype
из np.int64
?
Обратите внимание, что array
имеет тип np.uint8
- но я не назначаю сам массив, поэтому это сообщение не имеет для меня смысла.
Я попытался выполнить рефакторинг до этого:
tmp = len(array) # <<=== FAILS HERE
array_positions[count] = tmp
Но тут ничего не вышло .. . то же сообщение.
Я также попытался заменить len(array)
на array.size
, так как это 1d массив, но та же ошибка.
Кто-нибудь может понять, почему это не удается?
Я на Python 3,7 и нумба 0,50
Спасибо!