numpy.memmap 用法与注意事项

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

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

参数说明:
在这里插入图片描述

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
NumPy Input and Output: memmap() function
Pitfalls to avoid with np.memmap

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值