Spec-Zone.ru › NumPy 1.11

numpy.memmap

class numpy.memmap [source]

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

Отображения памяти используются для доступа к небольшим сегментам больших файлов на диске без чтения всего файла в память. Numpy’s memmap — это объекты, похожие на массивы. Это отличается от модуля Python mmap, который использует объекты типа файл.

Этот подкласс 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. Это имеет эффект только если форма больше, чем 1-D. По умолчанию порядок равен ‘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 и shape, которые соответствуют нашим данным:

>>> 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.11.0/reference/generated/numpy.memmap.html

Spec-Zone.ru

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