非常に大きなnetCDFファイル(それぞれ〜400Gb)のデータを処理しようとしています。各ファイルにはいくつかの変数があり、システムメモリ(例:180Gbと32Gb RAM)よりもはるかに大きいものです。私はnumpyとnetCDF4-pythonを使用しようとしていますが、スライスを一度にコピーしてそのスライスを操作することによって、これらの変数に対していくつかの操作を行います。残念ながら、各スライスを読み取るだけで実際にはかなり長い時間がかかり、パフォーマンスが低下します。非常に大きなnetCDFファイルをPythonで扱う
たとえば、変数の1つは形状(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ファイルのスライスを素早く読み取る方法です。または配列を効率的に転置する何らかの方法。
あなたはそれを転置よりもデータをよりやりたい場合は、[ 'xarray'](http://xarray.pydata.org/en/stable/)モジュールを見て:それは非常に素晴らしいを提供します['dask'](http://dask.pydata.org/en/latest/)のメモリ不足配列へのインタフェースです。 – j08lue