2017-07-13 10 views
1

非常に大きなndarrayをディスクに保存するにはどうすればいいですか?非常に大きなndarrayをディスクに保存するには?

データの複製を含むすべての解決策は認められませんのでご注意ください。例えば

、このコード

x = pandas.HDFStore("some_file.hdf") 
x.append("a", pandas.DataFrame(a)) 

はunapprovable重複メモリ使用

pandas.DataFrame(a) 

を含みます。

明白なコード

pickle.dump(a, f) 

ハング。

+0

あなたは 'pickle'のいくつかの選択肢を調べましたか?いくつかのアイデアはここにあります:http://www.benfrederickson.com/dont-pickle-your-data/ – abagshaw

+0

私はcPickleを試して、それが4GBの破られない限界を見つけました。また、MessagePackを見ても、それを使ってデータをシリアライズする方法を理解していません。 JSONを試してみませんでした。なぜなら、テキストを書くことは効果的ではないと思ったからです。 – Dims

+0

'np.save'で処理できますか?そうでない場合は、正確にどのくらいのデータですか? – user2699

答えて

1

numpyのsave関数が大きな配列を処理できるようです。

from pylab import * 
q = randn(1000, 1000, 1000) 
print('{} G'.format(q.nbytes/1024**3)) 
np.save(open('test_large_array_save.dat', 'wb'), q, allow_pickle=False) 

結果

7.450580596923828 G 

とディスク上に作成された7.5 Gファイル。

監視中のpythonのメモリ使用量は、保存中に顕著に増加しないことを示しているので、コピーは作成されていません。

+0

さらに、いくつかの議論:http://numpy-discussion.10968.n7.nabble.com/Huge-arrays-td25254.html – user2699

+0

私がしなかったのはフォーマットだけです。どのように魔法を行うことができますか? – Dims

+0

使用されている形式について尋ねる場合、ドキュメントにはいくつかの詳細があります:https://docs.scipy.org/doc/numpy/reference/generated/numpy.save.html – user2699

関連する問題