Python3.6 - 将大数组保存到文件中

时间:2017-10-18 12:30:47

标签: python arrays python-3.x file pickle

我想将大数组保存到文件中。我用了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)]]

2 个答案:

答案 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.]