Python-лучшая структура данных для невероятно большой матрицы


Мне нужно создать около 2 миллионов векторов с 1000 слотов в каждом (каждый слот просто содержит целое число).

Какая структура данных лучше всего подходит для работы с таким объемом данных? Возможно, я переоцениваю объем используемой обработки / памяти.

Мне нужно перебрать коллекцию файлов (в общей сложности около 34,5 ГБ) и обновлять векторы каждый раз, когда на линии встречается один из 2-х миллионов элементов (каждый из которых соответствует вектору).

I можно было бы легко написать код для этого, но я знаю, что он не будет достаточно оптимальным для обработки объема данных, поэтому я обращаюсь к вам, экспертам. :)

Лучший, Джорджина

3 3

3 ответа:

Вы можете быть привязаны к памяти вашей машины. Без очистки запущенных программ:

a = numpy.zeros((1000000,1000),dtype=int)

Не укладывается в память. Но в целом, если бы вы могли разбить задачу так, что вам не нужен весь массив в памяти сразу, или вы можете использовать разреженное представление, я бы пошел с numpy (scipy для разреженного представления).

Кроме того, вы можете подумать о хранении данных в hdf5 с h5py или pytables или netcdf4 с netcdf4-python на диске, а затем получить доступ к частям, которые вы необходимость.

Используйте разреженную матрицу, предполагая, что большинство записей равно 0.

Если вам нужно работать в оперативной памяти, попробуйте scipy.варианты разреженной матрицы . Она включает в себя алгоритмы для эффективного управления разреженными матрицами.