对比了pickle
/npy
/npz
/hdf
四种格式的读取效率。
1 | import numpy as np |
1 | (10, 256, 4097) |
Pickle
1 | s_t = time.time() |
1 | pkl dump costs 4.71714997292 sec |
npy
1 | s_t = time.time() |
1 | npy save costs 0.0500998497009 sec |
npz
之前对npz
有些误解,以为这个z代表的zip
是压缩的意思,实际上不是,它和python自带的zip
方法的含义很像,意味着存储多个array
,load的时候指定名称,比如data=arr1
,label=arr2
这样,取的时候,也不能只计算load的时间,因为这个load方法实际上没有把数据加到内存,只不过是返回一个文件io,读取要像使用dict
一样指定名称。
1 | s_t = time.time() |
1 | npz save costs 0.629067182541 sec |
hdf
1 | s_t = time.time() |
1 | table save costs 0.0691781044006 sec |
可视化对比结果
1 | import seaborn |
1 | [8.738465070724487, 0.017062902450561523, 0.09086489677429199, 0.029830217361450195] |
结论
Pickle
:读写慢,而且占空间,如果存储的不是对象而是一个numpy
数组,最好不要使用pickle
;npy
:读写都快,占用空间少;npz
:写读相对慢一些,适用于保存多个array
的情况;hdf
:读写相对都没有npy
快,存储空间也没有优势,适用于分布式平台。