Структура отображаемых в памяти данных NumPy ( memmap ) может быть хорошим выбором здесь.
Вы получаете доступ к массивам NumPy издвоичный файл на диске, без загрузки всего файла в память сразу.
(Обратите внимание, я верю, но я не уверен, что объект memmap Numpys не такой же, как Pythons-в частности, NumPys похож на массив, Python - на файл.)
Сигнатура метода:
A = NP.memmap(filename, dtype, mode, shape, order='C')
Все аргументы являются прямыми (т. е. они имеют одинаковыеэто означает, что используется в другом месте в NumPy) за исключением «порядка», который относится к порядку расположения памяти ndarray.Я считаю, что по умолчанию используется значение «C», а (только) другой параметр - «F», для Fortran - как и везде, эти два параметра представляют порядок основной строки и основной столбца соответственно.
Два метода:
flush (который записывает на диск все изменения, которые вы вносите в массив);и
close (который записывает данные в массив memmap или, точнее, в карту памяти в виде массива в данные, хранящиеся на диске)
пример использования:
import numpy as NP
from tempfile import mkdtemp
import os.path as PH
my_data = NP.random.randint(10, 100, 10000).reshape(1000, 10)
my_data = NP.array(my_data, dtype="float")
fname = PH.join(mkdtemp(), 'tempfile.dat')
mm_obj = NP.memmap(fname, dtype="float32", mode="w+", shape=1000, 10)
# now write the data to the memmap array:
mm_obj[:] = data[:]
# reload the memmap:
mm_obj = NP.memmap(fname, dtype="float32", mode="r", shape=(1000, 10))
# verify that it's there!:
print(mm_obj[:20,:])