2017-10-18 120 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.]