numpy.memmap
-
class numpy.memmap[source] -
Создаёт сопоставление с памятью массива, хранящегося в бинарном файле на диске.
Файлы с сопоставлением с памятью используются для доступа к небольшим фрагментам больших файлов на диске без чтения всего файла в память. Объекты memmap NumPy — это объекты, похожие на массивы. Это отличается от модуля
mmapPython, который использует объекты типа «поток данных».Этот подкласс ndarray имеет некоторые неприятные взаимодействия с некоторыми операциями, потому что он не подходит как подкласс. Альтернативой использованию этого подкласса является создание объекта
mmapсамостоятельно, а затем создание ndarray с помощью ndarray.__new__ непосредственно, передав созданный объект в параметр ‘buffer=‘.Этот класс может в какой-то момент быть преобразован в функцию-фабрику, возвращающую представление буфера mmap.
Удалите экземпляр memmap, чтобы закрыть файл memmap.
- Параметры
-
-
filenamestr, file-like object, or pathlib.Path instance -
Имя файла или объект файла, который используется в качестве буфера данных массива.
-
dtypedata-type, optional -
Тип данных, используемый для интерпретации содержимого файла. По умолчанию это
uint8. -
mode{‘r+’, ‘r’, ‘w+’, ‘c’}, optional -
Файл открывается в этом режиме:
‘r’
Открыть существующий файл только для чтения.
‘r+’
Открыть существующий файл для чтения и записи.
‘w+’
Создать или перезаписать существующий файл для чтения и записи.
‘c’
Копирование при записи: присваивания влияют на данные в памяти, но изменения не сохраняются на диск. Файл на диске доступен только для чтения.
По умолчанию это ‘r+’.
-
offsetint, optional -
В файле данные массива начинаются с этого смещения. Так как
offsetизмеряется в байтах, обычно это должно быть кратное размеру байтаdtype. Когдаmode != 'r', даже положительные смещения за пределами конца файла допустимы; Файл будет расширен для размещения дополнительных данных. По умолчаниюmemmapбудет начинаться с начала файла, даже еслиfilenameявляется указателем на файлfpиfp.tell() != 0. -
shapetuple, optional -
Желаемая форма массива. Если
mode == 'r'и число оставшихся байтов послеoffsetне кратно размеру байтаdtype, вы должны указатьshape. По умолчанию возвращаемый массив будет одномерным с количеством элементов, определяемым размером файла и типом данных. -
order{‘C’, ‘F’}, optional -
Укажите порядок расположения памяти ndarray: строчный, стиль C или столбцовый, стиль Fortran. Это имеет значение только если форма больше, чем 1-мерная. По умолчанию порядок — ‘C’.
-
См. также
-
lib.format.open_memmap -
Создайте или загрузите файл
.npyс сопоставлением с памятью.
Примечания
Объект memmap может использоваться везде, где принимается ndarray. При заданном memmap
fp,isinstance(fp, numpy.ndarray)возвращаетTrue.Файлы с сопоставлением с памятью не могут быть больше 2 ГБ на 32-битных системах.
Когда memmap приводит к созданию или расширению файла за пределы его текущего размера в файловой системе, содержимое новой части не определено. На системах с семантикой POSIX файловой системы расширенная часть будет заполнена нулевыми байтами.
Примеры
>>> data = np.arange(12, dtype='float32') >>> data.resize((3,4))
В этом примере используется временный файл, чтобы doctest не записывал файлы в вашу директорию. Вы бы использовали «обычное» имя файла.
>>> from tempfile import mkdtemp >>> import os.path as path >>> filename = path.join(mkdtemp(), 'newfile.dat')
Создаём memmap с типом данных и формой, которые соответствуют нашим данным:
>>> fp = np.memmap(filename, dtype='float32', mode='w+', shape=(3,4)) >>> fp memmap([[0., 0., 0., 0.], [0., 0., 0., 0.], [0., 0., 0., 0.]], dtype=float32)Записываем данные в массив memmap:
>>> fp[:] = data[:] >>> fp memmap([[ 0., 1., 2., 3.], [ 4., 5., 6., 7.], [ 8., 9., 10., 11.]], dtype=float32)>>> fp.filename == path.abspath(filename) True
Удаление сбрасывает изменения в памяти на диск перед удалением объекта:
>>> del fp
Загружаем memmap и проверяем, что данные были сохранены:
>>> newfp = np.memmap(filename, dtype='float32', mode='r', shape=(3,4)) >>> newfp memmap([[ 0., 1., 2., 3.], [ 4., 5., 6., 7.], [ 8., 9., 10., 11.]], dtype=float32)Только чтение memmap:
>>> fpr = np.memmap(filename, dtype='float32', mode='r', shape=(3,4)) >>> fpr.flags.writeable False
memmap только для копирования при записи:
>>> fpc = np.memmap(filename, dtype='float32', mode='c', shape=(3,4)) >>> fpc.flags.writeable True
Возможно присвоить значения массиву только для копирования при записи, но значения записываются только в копию массива в памяти, а не на диск:
>>> fpc memmap([[ 0., 1., 2., 3.], [ 4., 5., 6., 7.], [ 8., 9., 10., 11.]], dtype=float32) >>> fpc[0,:] = 0 >>> fpc memmap([[ 0., 0., 0., 0.], [ 4., 5., 6., 7.], [ 8., 9., 10., 11.]], dtype=float32)Файл на диске не изменяется:
>>> fpr memmap([[ 0., 1., 2., 3.], [ 4., 5., 6., 7.], [ 8., 9., 10., 11.]], dtype=float32)Смещение в memmap:
>>> fpo = np.memmap(filename, dtype='float32', mode='r', offset=16) >>> fpo memmap([ 4., 5., 6., 7., 8., 9., 10., 11.], dtype=float32)
- Атрибуты
-
-
filenamestr or pathlib.Path instance -
Путь к сопоставленному файлу.
-
offsetint -
Смещение в файле.
-
modestr -
Режим файла.
-
Методы
flush(self)Записать любые изменения в массиве в файл на диске.
© 2005–2020 NumPy Developers
Licensed under the 3-clause BSD License.
https://numpy.org/doc/1.18/reference/generated/numpy.memmap.html