3

Scientific.IO.NetCDF を使用して、NetCDF データを Python に読み込みます。サイズ (366,30,476,460) の 4d 32 ビット変数を読み込もうとしていますが、ndarray でゼロになってしまいます。奇妙なことに、3D データ (1,30,476,460) だけを読み取ると、返される値は問題ありません。

これは私がやろうとしていることです:

from Scientific.IO.NetCDF import NetCDFFile as Dataset
from collections import namedtuple

# Define output data structure as a named tuple
Roms_data=namedtuple('Roms_data','Ti Tf Nt U V W Zeta')

# Open the NetCDF file for reading.
ncfile = Dataset(data_file,'r')

if Tstart==-1:
  ti=0
  tf=NTsav-1
else:
  ti=Tstart-1
  tf=Tend-1

try:
  udata = ncfile.variables['u'][:]
  print str(udata.shape)
except:
  print ' Failed to read u data from '+data_file

「[:]」は、4d 変数「u」全体を udata という ndarray に読み込んでいることを意味します。これは機能せず、udata はゼロでいっぱいです。しかし、もしそうなら:

try:
  udata = ncfile.variables['u'][0,:,:,:]
  print str(udata.shape)
except:
  print ' Failed to read u data from '+data_file

次に、現在3d ndarrayである「udata」には、NetCDFファイルから読み取ることになっている値があります。

何か助けはありますか?前もって感謝します。

4

1 に答える 1

1

問題の原因は不明ですが、別の方法をお試しください。ROMS海洋モデルから出力されたNetCDF4データを読んでいるようです。私はこれを定期的に行っていますが、これには常にnetcdf-python モジュールを使用することを好みます。

 from netCDF4 import Dataset
 cdf=Dataset("ns8km_avg_16482_GLORYS2V1.nc","r")
 u=cdf.variables["u"][:]

netcdf-python モジュールの利点の 1 つは、netcdf ファイルのオフセット、スケール、および fill_valueを自動的に調整することです。したがって、netcdf ファイルから読み込まれた 4D 配列には、マスクされた値が含まれます。あなたのアプローチのマスキングが正しく行われていないのだろうか。おそらく、netcdf-python をインストールして、このアプローチでデータを読み取ってみてください。乾杯、トロンド

于 2013-09-04T14:20:01.083 に答える