从磁盘保存/加载数据时的内存错误pickle转储

时间:2018-02-23 19:35:16

标签: python numpy pickle hdf5 h5py

我有一个40,000个例子dataset=(40.000,2048)的数据集。在一个过程之后,我希望有效地存储和加载数据集。数据集采用numpy格式

我使用pickle来存储这个数据集但是它需要时间来存储并且有更多的时间来加载它。我甚至得到记忆错误。

我试图将数据集分成几个样本,如下所示:

with open('dataset_10000.sav', 'wb') as handle:
    pickle.dump(train_frames[:10000], handle, protocol=pickle.HIGHEST_PROTOCOL)

with open('dataset_20000.sav', 'wb') as handle:
    pickle.dump(train_frames[10000:20000], handle, protocol=pickle.HIGHEST_PROTOCOL)

with open('dataset_30000.sav', 'wb') as handle:
    pickle.dump(train_frames[20000:30000], handle, protocol=pickle.HIGHEST_PROTOCOL)

with open('dataset_35000.sav', 'wb') as handle:
    pickle.dump(train_frames[30000:35000], handle, protocol=pickle.HIGHEST_PROTOCOL)

with open('dataset_40000.sav', 'wb') as handle:
    pickle.dump(train_frames[35000:], handle, protocol=pickle.HIGHEST_PROTOCOL)

但是我得到内存错误而且太重了。

What is the best/optimized way to save/load such a huge data from/into disk ?

1 个答案:

答案 0 :(得分:0)

对于numpy.ndarray个对象,无论如何都要使用numpy.save,而不是pickle,因为它更具可移植性。它应该更快,并且在序列化过程中需要更少的内存。

然后可以使用numpy.load加载它,它甚至提供了一个memmap选项,允许您使用大于可以放入内存的数组。