NotImplementedError: range_state_int64 не может быть представлен как Numpy dtype - PullRequest
2 голосов
/ 07 июня 2019

Я пытаюсь написать функцию, которая инициализирует массив и перемешивает его перед возвратом. импорт numba as nb

@nb.jit(nopython=True, cache=True)
def test(x):
    ind = np.array(range(len(x)))
    np.random.shuffle(ind)
    return ind

В сообщении об ошибке сказано, что я использовал неподдерживаемые функции или типы данных:

NotImplementedError: range_state_int64 cannot be represented as a Numpy dtype

Поддерживает ли numba numpy.random.shuffle () или нет? Как пересмотреть это? Спасибо!

1 Ответ

1 голос
/ 07 июня 2019

Это на самом деле не имеет ничего общего с random.shuffle, потому что numba поддерживает случайный модуль из коробки .

Проблема здесь в том, что numba не может поддерживать объект range (потому что это объект python), когда установлен флаг nopython. Вместо range вместо np.arange вместо:

@nb.njit(cache=True)  # same as @nb.jit(nopython=True, ...)
def test(x):
    ind = np.arange(len(x))
    np.random.shuffle(ind)
    return ind

test([1, 2, 3])
# array([1, 0, 2])
...