非常に大きな netCDF ファイル (それぞれ ~400 Gb) のデータを処理しようとしています。各ファイルにはいくつかの変数があり、すべてシステム メモリよりもはるかに大きくなります (例: 180 Gb と 32 Gb RAM)。私はnumpyを使用しようとしています.netCDF4-pythonは、一度にスライスをコピーしてそのスライスを操作することにより、これらの変数に対していくつかの操作を行います。残念ながら、各スライスを読み取るだけで非常に長い時間がかかり、パフォーマンスが低下しています。
たとえば、変数の 1 つは shape の配列です(500, 500, 450, 300)
。スライスを操作したい[:,:,0]
ので、次のようにします。
import netCDF4 as nc
f = nc.Dataset('myfile.ncdf','r+')
myvar = f.variables['myvar']
myslice = myvar[:,:,0]
しかし、最後のステップには非常に長い時間がかかります (私のシステムでは約 5 分)。たとえば、形状の変数を(500, 500, 300)
netcdf ファイルに保存した場合、同じサイズの読み取り操作には数秒しかかかりません。
これをスピードアップする方法はありますか?明らかな方法は、選択しているインデックスが最初に表示されるように配列を転置することです。しかし、このような大きなファイルでは、これをメモリ内で実行することは不可能であり、単純な操作にすでに長い時間がかかることを考えると、それを試みるのはさらに遅くなるようです。私が望むのは、Fortran のインターフェイス get_vara 関数のように、netcdf ファイルのスライスをすばやく読み取る方法です。または、配列を効率的に転置する何らかの方法。