原文:https://docs.scipy.org/doc/numpy/reference/generated/numpy.memmap.html
校对:(虚位以待)
numpy.
memmap
[source]创建存储在磁盘上的二进制文件中的数组的内存映射。
内存映射文件用于访问磁盘上大文件的小段,而不是将整个文件读入内存。Numpy的memmap是数组类的对象。这与Python的mmap
模块不同,后者使用类似文件的对象。
这个ndarray的子类与一些操作有一些令人不快的交互,因为它不太适合作为一个子类。使用这个子类的替代方法是自己创建mmap
对象,然后直接创建一个带有ndarray .__ new__的ndarray,传递在其'buffer ='参数中创建的对象。
这个类可以在某些时候变成一个将视图返回到mmap缓冲区的工厂函数。
删除要关闭的memmap实例。
参数: | filename:str或类文件对象
dtype:数据类型,可选
mode:{'r +','r','w +','c'},可选
offset:int,可选
shape:tuple,可选 order:{'C','F'},可选
|
---|
笔记
memmap对象可以在任何接受ndarray的地方使用。Given a memmap fp
, isinstance(fp, numpy.ndarray)
returns True
.
内存映射数组使用Python内存映射对象(在Python 2.5之前)不允许文件大于某个大小,具体取决于平台。这个大小总是
当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')
使用与我们的数据匹配的dtype和shape创建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)
属性
文件名 | (str)映射文件的路径。 |
抵消 | (int)文件中的偏移位置。 |
模式 | (str)文件模式。 |
方法
flush () |
将数组中的任何更改写入磁盘上的文件。 |