2017-02-22 11 views
0

は、私は一つの大きなファイルに多くのnumpyのファイルを置くためにこの質問Append multiple numpy files to one big numpy file in pythonに従って、結果は次のとおりです。メモリエラーのない大きなnumpyファイルに多数のnumpyファイルを入れるには?

import matplotlib.pyplot as plt 
import numpy as np 
import glob 
import os, sys 
fpath ="path_Of_my_final_Big_File" 
npyfilespath ="path_of_my_numpy_files" 
os.chdir(npyfilespath) 
npfiles= glob.glob("*.npy") 
npfiles.sort() 
all_arrays = np.zeros((166601,8000)) 
for i,npfile in enumerate(npfiles): 
    all_arrays[i]=np.load(os.path.join(npyfilespath, npfile)) 
np.save(fpath, all_arrays) 
data = np.load(fpath) 
print data 
print data.shape 

私は何千ものファイルを持って、このコードを使用することによって、私は常にメモリエラーを持っているので、I私の結果ファイルを持つことはできません。 このエラーを解決するにはどうすればよいですか? 最後のnumpyファイルをファイルごとに読み書きし、追加する方法は?

+0

いつメモリエラーが発生しますか?あなたの 'np.zeros'行が私のシステムにとって大きすぎるので、10G配列を作成します。配列が大きすぎて保存できない場合や、再度読み込む場合は、操作してプロットするには大きすぎます。なぜデータをチャンクに保存しないのですか?それは1つの大きな大きなファイル/配列になければなりませんか? – hpaulj

+0

@hpaulj、メモリエラーが発生しました。この行の直後、all_arrays = np.zeros((166601,8000))。 –

+0

もちろん、私は166601ファイルを持っていますが、それはたくさんあります。そして各ファイルについて私は8000ポイントを持っています –

答えて

1

np.memmapにお問い合わせください。ドキュメントから

all_arrays = np.memmap("all_arrays.dat", dtype='float64', mode='w+', shape=(166601,8000)) 

:あなたはall_arraysをインスタンス化することができます

メモリ・マップ・ファイルは、ファイル全体をメモリに読み込むことなく、ディスク上の大きなファイルの小さなセグメントにアクセスするために使用されています。

すべてのアレイにアクセスできますが、オペレーティングシステムは実際に必要な部分をロードします。ドキュメントのページを注意深く読んで、パフォーマンスの観点から、ファイルを列単位で保存するか行単位で保存するかを決めることができます。

+0

どこにこの行を追加するのですか?私の最初の問題は、all_arrays = np.zeros((166601,8000))です。 –

+0

は、その行を答えに置き換えます。安全な側にするには、float32の代わりにfloat64を使用してください(私は答えでそれを更新します) – Teudimundo

+0

私はあなたの解決策を試して、私は最終的なファイルの外観を待っています、私は100ファイルのためにそれを試して、最終的なファイルは6.251 KBで、166601の場合、10414,166 KB(0,009931723 GB)が必要です。または、私のディスクDIには無料の367 GBがあります。 –

関連する問題