См. Следующий минимальный код,
import numba
list_of_list = [[1, 2], [34, 100]]
@numba.njit()
def test(list_of_list):
if 1 in list_of_list[0]:
return 'haha'
test(list_of_list)
Это не будет работать, и кажется, что list_of_list [0] больше не ведет себя как список во время компиляции.Однако работает следующий код:
list_of_list = [[1, 2], [34, 100]][0] # this is a list NOW!
@numba.njit()
def test(list_of_list):
if 1 in list_of_list:
return 'haha'
test(list_of_list)
На этот раз я перехожу к списку, а не к списку.Тогда это работает.Кажется, for i in list
работает в Numba, а не for i in list_of_list
.
В моем случае использование передачи списка или массива, такого как двумерные данные, в функцию numba является обычным делом.Иногда мне нужен только один элемент в списке, который динамически определяется в программе.
Чтобы заставить его работать, я на самом деле разработал решение: сделав list_of_list
сведенным в long list
, затем используйте линейный индекс для извлечения одного элемента из оригинала list_of_list
.
Я спрашиваю здесь, есть ли другие альтернативные решения?