Перебирая огромный (только для чтения) список списков в Numba, создание TypedList является узким местом - PullRequest
0 голосов
/ 06 марта 2020

Я пытаюсь перебрать огромный (77M записей, размер 5Gb) списки в python (используя Numba для скорости). Но у меня возникают некоторые проблемы.

То, что я пробовал:

  1. Numba не принимает список списков, , как упомянуто здесь и в документах .

  2. В решении goto используется массив Numpy, но он должен быть квадратным (т.е. все списки в моем списке имеют быть такой же длины, которой они не являются (см. ниже)). Добавление завершающих нулей, чтобы исправить это, занимает слишком много времени, потому что требуется еще одна полная итерация в python, измерение длины каждого списка и добавление соответствующего количества нулей.

  3. Я пробовал используя (более новый) TypedList , но создание этого означает итерацию по тому же набору данных и вызов TypedListInstance.append для каждой из моих записей 77M. Снова слишком медленно. Использование TypedListInstance.extend - хороший улов 22: он реализован в numba под капотом и, следовательно, не принимает список списков.

Все идеи очень приветствуются, я был борется с этой проблемой уже пару дней.

Спасибо за чтение.

JR

Добавление в 2: массив Numpy должен быть квадратным, потому что в противном случае он просто создает массив python собственных объектов списка

...