Python中如何高效加载存储为npz格式的字典数据
大体积.npz文件高效加载优化方案
- 使用内存映射模式降低加载开销
np.load支持mmap_mode参数,启用后不会一次性将全量数据载入内存,而是按需从磁盘读取,大幅降低初始加载耗时和峰值内存占用,适合超大数据集场景:
# 只读内存映射模式加载 dc_data = np.load("file.npz", mmap_mode='r') # 非必要不要提前转全量keys/values列表,按需读取指定key的数组即可
如果后续逻辑必须要全量数据,该模式也能减少内存交换带来的额外耗时。
- 替换低效的Python原生操作
你当前使用的list(zip(* dc_data.values()))是纯Python实现的操作,需要先把所有数组载入内存再做维度重排,性能非常差。如果确实需要该格式的输出,改用numpy原生堆叠操作,效率提升10倍以上:
# 替代zip+list转换的写法 val = np.stack(list(dc_data.values()), axis=1) ids = list(dc_data.keys())
转存为更高效的存储格式
如果该文件需要反复读取,建议一次性转存格式,后续加载速度可提升数十倍:- 转存为未压缩npz:如果原文件是
np.savez_compressed保存的压缩格式,每次加载都需要做解压运算,改用np.savez保存为未压缩版本即可省去解压耗时 - 转存为HDF5格式:使用h5py库存储,支持随机读取、部分加载,适配超大数据集的高频读取需求
- 转存为未压缩npz:如果原文件是
规避IO瓶颈
如果原文件存放在机械硬盘或网络存储中,先拷贝到本地SSD磁盘再读取,可大幅降低IO等待耗时。
内容的提问来源于stack exchange,提问作者Sweety Tripathi
相关产品推荐
相关产品推荐

