それぞれ 521.8 MB の 2 つの NetCDF ファイルからデータを取得するプロジェクトに取り組んでいます。確かに、これらはかなり大きなファイルです。私は 4 GB のメモリを搭載した MacBook Pro で作業していますが、このコンピュータは約 4 年前のものです。コードは Python で書かれています。
ファイルには、地球全体の 1 年分の気象データが含まれています。これは、時間 (長さ 1460)、高度 (長さ 17)、緯度 (長さ 73)、および経度 (長さ 144) を含む 4D 配列です。一度に必要なのは、その情報の特定の部分だけです。具体的には、常に必要ですが、高度レベルは 1 つだけで、緯度と経度 (20x44) の特定の地域だけが必要です。
両方のファイルからこのすべてのデータを収集し、必要なデータのみを識別し、計算を実行して、データをテキスト ファイルに出力するコードを作成しました。その年の処理が完了すると、63 年間のデータをループ処理しました。これは、同等サイズの 126 ファイルに相当します。現在、コードは、プロセスの開始時にメモリが不足していると言っています。関連するコードは次のようです。
from mpl_toolkits.basemap.pupynere import NetCDFFile
#Create the file name for the input data.
ufile="Flow/uwnd."+str(time)+".nc"
vfile="Flow/vwnd."+str(time)+".nc"
#Get the data from that particular file.
uu=NetCDFFile(ufile)
vv=NetCDFFile(vfile)
#Save the values into an array (will be 4-dimentional)
uwnd_short=uu.variables['uwnd'][:]
vwnd_short=vv.variables['vwnd'][:]
したがって、最初のセクションは NetCDF ファイルの名前を作成します。2 番目のセクションは、NetCDF ファイルからすべてのデータを取得します。3 番目のセクションは、インポートされたデータを取得し、4D 配列に配置します。(これは、Python がデータを処理する方法から、厳密には配列ではないかもしれませんが、C++ のバックグラウンドがあるため、そのように考えています。適切な語彙が不足していることをお詫びします。) 後で、必要な特定のデータを分離します。 4D 配列から必要な計算を実行します。問題は、これが以前は機能していたことですが、現在、回線で作業中にコンピューターのメモリが不足していvv=NetCDFFile(vfile)
ます。
どこかにメモリリークの可能性はありますか?ファイル全体を取り込まないように、必要な特定の範囲のデータのみを取得する方法はありますか? データを取り込んでから、それを使って計算を実行するために必要なデータのセクションを整理する、より効率的な方法はありますか?