我想将大数组保存到文件中。我用了pickle.dump(array, file, pickle.HIGHEST_PROTOCOL)
。它适用于小阵列但是当我尝试保存非常大的阵列(例如1GB或更多)时,它使用整个内存并且我的电脑冻结。
有什么方法可以保存那个大阵列吗?
数组示例:
[[array([1,2,3,298,299,300], dtype=float32),array([1,2,3,298,299,300], dtype=float32),array([1,2,3,298,299,300], dtype=float32)],
[array([1,2,3,298,299,300], dtype=float32),array([1,2,3,298,299,300], dtype=float32),array([1,2,3,298,299,300], dtype=float32)],
[array([1,2,3,298,299,300], dtype=float32),array([1,2,3,298,299,300], dtype=float32),array([1,2,3,298,299,300], dtype=float32)]]
答案 0 :(得分:0)
如果它是(或可以转换成)numpy数组,则numpy.save更有效
答案 1 :(得分:-1)
看一下HDF5格式和python实现h5py。
http://docs.h5py.org/en/latest/quick.html
这使得可以附加到文件。您可以遍历数据集。或者将数据附加到群集中。
import h5py
# data
n = int(1e6)
arr = np.arange(n)
# writing to hdf5
f = h5py.File("mytestfile.hdf5", "w")
dset = f.create_dataset("data_name", shape=(n,))
dset[:n] = arr[:n]
f.close()
# reading from hdf5
f = h5py.File("mytestfile.hdf5", "r")
print(f["name"][:])
# outputs
# [ 0. 1. 2. ..., 999997. 999998. 999999.]