2017-10-18 116 views
0

我想将大数组保存到文件。我用pickle.dump(array, file, pickle.HIGHEST_PROTOCOL)。它适用于小阵列,但当我尝试保存非常大的阵列(例如1GB或更多)时,它会使用整个内存,并且我的电脑会冻结。Python3.6 - 将大数组保存到文件

有没有办法如何保存那个大阵列?

阵列例如:

[[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

也许保存一个数组可能会以二进制格式完成,即使这是一个更大的努力。你有一个'array'的例子(请小一点?)我不确定这个类型。 –

+1

假设你使用'numpy':尝试['numpy.save'](https://docs.scipy.org/doc/numpy-1.13.0/reference/generated/numpy.save.html),这节省了一个'.npy'文件。 – L3viathan

+1

请举一个你阵列的例子。 –

回答

0

如果是(或可被转化为)一个numpy的阵列然后numpy.save是更有效的

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