Spec-Zone.ru › NumPy 2.0

numpy.memmap

classnumpy.memmap(filename, dtype=<class 'numpy.ubyte'>, mode='r+', offset=0, shape=None, order='C')[source]

Создайте отображение памяти на массив, хранящийся в бинарном файле на диске.

Файлы с отображением памяти используются для доступа к небольшим сегментам больших файлов на диске без чтения всего файла в память. Memmap NumPy — это объекты, похожие на массивы. Это отличается от модуля Python mmap, который использует объекты типа «файл».

Этот подкласс ndarray имеет некоторые неприятные взаимодействия с некоторыми операциями, потому что он не совсем правильно вписывается в качестве подкласса. Альтернатива использованию этого подкласса заключается в создании объекта mmap самостоятельно, а затем создании ndarray с помощью ndarray.__new__ непосредственно, передавая созданный объект в его параметр «buffer=».

Этот класс, возможно, в какой-то момент будет преобразован в функцию-фабрику, которая возвращает представление буфера mmap.

Очистить экземпляр memmap, чтобы записать изменения в файл. В настоящее время нет API для закрытия базового mmap. Сложно гарантировать, что ресурс фактически закрыт, так как он может быть совместно используется между различными экземплярами memmap.

Parameters:
filenamestr, объект-файл или экземпляр pathlib.Path

Имя файла или объект файла, используемый в качестве буфера данных массива.

dtypeтип данных, необязательно

Тип данных, используемый для интерпретации содержимого файла. По умолчанию uint8.

mode{‘r+’, ‘r’, ‘w+’, ‘c’}, необязательно

Файл открывается в этом режиме:

‘r’

Открыть существующий файл только для чтения.

‘r+’

Открыть существующий файл для чтения и записи.

‘w+’

Создать или перезаписать существующий файл для чтения и записи. Если mode == 'w+' то shape также должен быть указан.

‘c’

Копирование при записи: присваивания влияют на данные в памяти, но изменения не сохраняются на диск. Файл на диске является только для чтения.

По умолчанию «r+».

offsetint, необязательно

В файле данные массива начинаются с этого смещения. Поскольку offset измеряется в байтах, он обычно должен быть кратным размеру байта dtype. При mode != 'r', даже положительные смещения за концом файла допустимы; файл будет расширен для размещения дополнительных данных. По умолчанию memmap будет начинаться с начала файла, даже если filename — это указатель файла fp и fp.tell() != 0.

shapeint или последовательность целых чисел, необязательно

Желаемая форма массива. Если mode == 'r' и количество оставшихся байтов после offset не кратно размеру байта dtype, необходимо указать shape. По умолчанию возвращаемый массив будет одномерным с количеством элементов, определяемым размером файла и типом данных.

Изменено в версии 2.0: Параметр shape теперь может быть любым целочисленным типом последовательности, ранее типы были ограничены кортежем и целым числом.

order{‘C’, ‘F’}, необязательно

Укажите порядок раскладки памяти ndarray: строчно-главный, стиль C или столбцово-главный, стиль Fortran. Это влияет только в том случае, если форма больше, чем одномерная. Порядок по умолчанию — «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

Очищает изменения памяти на диске, чтобы прочитать их обратно

>>> fp.flush()

Загрузить 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)
Attributes:
filenamestr или экземпляр pathlib.Path

Путь к файлу с отображением.

offsetint

Позиция смещения в файле.

modestr

Режим файла.

Методы

flush()

Записать любые изменения в массиве в файл на диске.

© 2005–2024 NumPy Developers
Licensed under the 3-clause BSD License.
https://numpy.org/doc/2.0/reference/generated/numpy.memmap.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API