定义:
numpy.memmap(filename,datatype[optional],mode[optional],offset[optional] ,shape[optional],order[optional])
功能:numpy模块功能,创建存储在磁盘二进制文件中的数组的内存映射。
参数:
filename(文件名):str、类似文件的对象或pathlib.path实例,用作数组数据缓冲区的文件名或文件对象。
datatype(数据类型):数据类型,可选,用于解释文件内容的数据类型。默认值为uint8。
mode(模式):'r+'、'r'、'r+'、'c',可选(默认为r+)
offset(字节偏移):在该文件中,数组数据从此偏移量开始。 由于偏移量是以字节为单位测量的,因此通常应该是dtype字节大小的倍数。 当模式!='r'时,甚至超出文件末尾的正偏移也是有效的; 该文件将被扩展以容纳附加数据。 默认情况下,memmap将从文件的开头开始,即使filename是文件指针fp和fp.tell()!= 0。
shape(形状): tuple,所需的阵列形状。 如果mode =='r'且offset之后的剩余字节数不是dtype的字节大小的倍数,则必须指定shape。 默认情况下,返回的数组将是1-D,元素数由文件大小和数据类型确定。
order(顺序):{'C', 'F'},
文件模式:
“r”:打开现有文件仅供读取。
“r+”:打开现有文件进行读写。
“w+”:创建或覆盖现有文件进行读写。
“c”写时复制:分配会影响内存中的数据,但更改不会保存到磁盘。磁盘上的文件是只读的。
举例:
from tempfile import mkdtemp
import os.path as path
import numpy as np
data=np.arange(12,dtype='float32')
data.resize(3,4)
filename = path.join(mkdtemp(),'newfile.dat')
fp = np.memmap(filename,dtype='float32',mode='w+',shape=(3,4))
#创建一个内存映射关系fp,数据为0.
fp#输出fp
Out[2]:
memmap([[0., 0., 0., 0.],
[0., 0., 0., 0.],
[0., 0., 0., 0.]], dtype=float32)
fp[:] = data[:]
fp#输出fp
Out[4]:
memmap([[ 0., 1., 2., 3.],
[ 4., 5., 6., 7.],
[ 8., 9., 10., 11.]], dtype=float32)
fp.filename == path.abspath(filename)
Out[5]: True
del fp#删除fp
newfp = np.memmap(filename, dtype='float32', mode='r', shape=(3,4))
newfp
Out[8]:
memmap([[ 0., 1., 2., 3.],
[ 4., 5., 6., 7.],
[ 8., 9., 10., 11.]], dtype=float32)
fpr = np.memmap(filename, dtype='float32', mode='r', shape=(3,4))
fpr.flags.writeable
Out[10]: False#由于fpr为只读
fpc = np.memmap(filename, dtype='float32', mode='c', shape=(3,4))
fpc.flags.writeable
Out[12]: True
fpc
Out[13]:
memmap([[ 0., 1., 2., 3.],
[ 4., 5., 6., 7.],
[ 8., 9., 10., 11.]], dtype=float32)
fpc[2,:] = 1
fpc
Out[15]:
memmap([[0., 1., 2., 3.],
[4., 5., 6., 7.],
[1., 1., 1., 1.]], dtype=float32)
fpr#硬盘上的映射数据并没被改变
Out[16]:
memmap([[ 0., 1., 2., 3.],
[ 4., 5., 6., 7.],
[ 8., 9., 10., 11.]], dtype=float32)
fpo = np.memmap(filename, dtype='float32', mode='r', offset=16)
fpo#输出offset字节偏移后的数据
Out[18]: memmap([ 4., 5., 6., 7., 8., 9., 10., 11.], dtype=float32)
参考翻译自:
numpy.memmap:https://docs.scipy.org/doc/numpy/reference/generated/numpy.memmap.html