2017-10-18 6 views
0

大きな配列をファイルに保存したい。私はpickle.dump(array, file, pickle.HIGHEST_PROTOCOL)を使用しました。それは小さな配列で動作しますが、非常に大きな配列(1GB以上など)を保存しようとすると、メモリ全体が使用され、PCがフリーズします。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はHDF5形式とPythonの実装h5pyを見て、より効率的

-1

あります。

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.] 
関連する問題