我正在做一些与图像相关的ML任务,作为预处理的结果,我正在创建一个包含重要元数据属性的类的对象,沿着一个3d numpy图像数据数组。我想减少这些对象的大小,并提高它们的读写速度。
目前,对象是使用pickle
保存为文件的,但这似乎不是最有效的方法。dill
库应该在保存numpy项方面更好,但由于我需要处理许多文件,总体性能较低,这似乎没有帮助。
我也听说过numpy.save方法,但我不确定如何将其作为pickle过程的一部分来实现,我使用pickle.dump和pickle.load来pickle项目。
1条答案
按热度按时间xqkwcwgp1#
pickle依赖于每个对象的“pickle”方法,无论对象是列表、dict还是其他对象。numpy数组的pickle格式与www.example.com基本相同np.save。因此速度和文件大小应该相似。相反,np.save使用pickle来格式化非数组参数或包含对象的数组(注意save/load中的allow_pickle参数)。
我看到一些ML项目使用
HDF5/h5py
来保存模型和数据,但我没有太多的关注,我回答了h5py
的问题,但还没有在速度和压缩很重要的大型项目中尝试过。多个numpy数组也可以用
np.savez
保存(在压缩版本中),这会将每个数组保存为一个npy
文件。np.save
是保存数组最有效的方法。它基本上由一个小的头块和数组数据缓冲区的字节副本组成。除非数组有很多相同的值,否则压缩空间很小。