Spec-Zone.ru › NumPy 1.10

numpy.memmap

class numpy.memmap [source]

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

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

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

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

Удалите экземпляр memmap для закрытия.

Параметры:

filename : str или объект потока данных

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

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

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

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

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

‘r’ Открыть существующий файл только для чтения.
‘r+’ Открыть существующий файл для чтения и записи.
‘w+’ Создать или перезаписать существующий файл для чтения и записи.
‘c’ Копирование при записи: присваивания влияют на данные в памяти, но изменения не сохраняются на диск. Файл на диске — только для чтения.

По умолчанию ‘r+’.

offset : int, необязательно

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

shape : кортеж, необязательно

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

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

Укажите порядок расположения памяти ndarray: row-major, стиль C или column-major, стиль Fortran. Это имеет значение только если форма больше одномерной. По умолчанию порядок ‘C’.

Примечания

Объект memmap можно использовать везде, где принимается ndarray. Учитывая memmap fp, isinstance(fp, numpy.ndarray) возвращает True.

Массивы с картами памяти используют объект карты памяти Python, который (до Python 2.5) не позволяет файлам быть больше определённого размера в зависимости от платформы. Этот размер всегда меньше 2 ГБ даже на 64-битных системах.

Когда 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 с dtype и формой, соответствующими нашим данным:

>>> 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)

Атрибуты

filename (str) Путь к файлу, к которому привязана карта памяти.
offset (int) Позиция смещения в файле.
mode (str) Режим файла.

Методы

flush() Записать все изменения в массиве в файл на диске.

© 2008–2016 NumPy Developers
Licensed under the NumPy License.
https://docs.scipy.org/doc/numpy-1.10.1/reference/generated/numpy.memmap.html

Spec-Zone.ru

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