numpy.memmap 用法与注意事项

当处理大数组时,内存可能不够用。numpy 提供了一个函数 np.memmap() 让我们可以处理大数组。memmap = memory mapped

np.memmap() 可以读取大磁盘文件中的一小段到内存,所以它占内存较小

参数说明:
numpy.memmap 用法与注意事项_第1张图片

import numpy as np
from tempfile import mkdtemp # 用于创建临时文件夹,真实使用时可以指定自己的文件夹
import os

# 创建数组
data = np.arange(16, dtype='float32')
data.resize((4,4))

# 初始化可以写入数据的文件
filename = os.path.join(mkdtemp(), 'newfile.bin')
fpath = np.memmap(filename, dtype='float32', mode='w+', shape=(4,4))
fpath

>>>
memmap([[0., 0., 0., 0.],
        [0., 0., 0., 0.],
        [0., 0., 0., 0.],
        [0., 0., 0., 0.]], dtype=float32)
# 数组数据写入文件中
fpath[:] = data[:]
# 指定位置更新数据
fpath[0,0] = 100
# 将内存数据写到磁盘
fpath.flush()
print(fpath)
>>>
[[ 100.  1.  2.  3.]
 [ 4.  5.  6.  7.]
 [ 8.  9. 10. 11.]
 [12. 13. 14. 15.]]
# 读取文件,记住需要指定dtype,不然会以默认的uint8读取数据
newfp = np.memmap(filename, dtype='float32', mode='r', shape=(4,4))
newfp

>>>
memmap([[ 100.,  1.,  2.,  3.],
        [ 4.,  5.,  6.,  7.],
        [ 8.,  9., 10., 11.],
        [12., 13., 14., 15.]], dtype=float32)

未指定 dtype 和 shape 会输出错误数据:
numpy.memmap 用法与注意事项_第2张图片
numpy.memmap 用法与注意事项_第3张图片

参考:
numpy.memmap
NumPy Input and Output: memmap() function
Pitfalls to avoid with np.memmap

你可能感兴趣的:(Python,Numpy,numpy,memmap,大数据,大文件,内存不足)