2017-07-03 8 views
0

私は、この例でどのようにpythonオブジェクトが振る舞うかを理解しています。pythonのnetcdf4がdatetimeを使用するときに変数全体をロードするのを防ぐ方法

非常に大きなnetcdf4データセット、例えば無限次元の「時間」である2015-11-12 16:0:8.000000 0: 00。私は、datetimeオブジェクトとして、の最初と最後の時刻に、のメモリにすべての値をロードせずにアクセスしたいと思います。

今、私はこのコードを使用してDateTimeオブジェクトとして最初と最後の日付で取得することができます知っている:

import netCDF4 as nc4 
from netCDF4 import Dataset 
cdf = Dataset(fname,mode="r",format='NETCDF4') 
time_var = cdf.variables['time'] 
dtime = nc4.num2date(time_var[0:10],time_var.units) 
print('data starts at %s' % dtime[0]) 

print文は、私が欲しいものを私に与えます:
「データは2015年11月12日から始まります16:00:08 "

これで、pythonはすべての '時間'データをメモリにロードしましたか?あるいは、私がMATLABを使って理解するようになったので、cdfは現在開いているファイルの 'time'変数へのポインタになりました。

多くのおかげで、 Marinna

+1

私はあなたのコードがあなたに最初と最後の時間を与えるとは思わない。 'time_var [0:10]'は 'time'変数から10番目の要素までの最初の(それを含む)要素を読み込みます。最初と最後の要素が必要な場合は、 'time_var [0]'と 'time_var [-1]'を読んでください。私が知る限り、それは最初と最後の要素だけをメモリに読み込みます。 – Bart

答えて

1

はい、CDFは、開いているファイルではなく、メモリへのコピーへのポインタまたはビューがあります。この答えはこれについて説明します。 https://stackoverflow.com/a/4371049/1211981 @bartはあなただけで使うべきで述べたように:

dtime = nc4.num2date(time_var[0],time_var.units) 

dtime2 = nc4.num2date(time_var[-1],time_var.units) 

をしたい時刻を取得します。メモリに大きなコピーはありません。

関連する問題