2013-09-04 1 views
3

Я использую Scientific.IO.NetCDF для чтения данных NetCDF в Python. Я пытаюсь прочитать 4d 32-битную переменную с размером (366,30,476,460), но в итоге я получаю нули в моем ndarray. Как ни странно, если я читаю только 3D-данные (1,30,476,460), возвращаемые значения в порядке.Чтение 4d var из файла NetCDF в Python

Это то, что я пытаюсь сделать:

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 переменную «и» в качестве ndarray называется udata. Это не работает, и удата полна нулей. Однако, если я делаю:

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

затем «udata», который теперь 3d ndarray имеет значения, которые он должен прочитать из файла NetCDF.

Любая помощь? Заранее спасибо.

+0

Если возможно, одно из предложений может заключаться в том, чтобы поместить ваш файл netCDF в dropbox (или какую-то эквивалентную услугу), чтобы мы могли экспериментировать с ним. –

ответ

1

Непонятно мне, что может вызвать вашу проблему, но у меня есть одно альтернативное предложение, которое вы можете попробовать. Кажется, вы читаете данные NetCDF4 из модели океана ROMS. Я делаю это регулярно входят, но я всегда предпочитаю использовать netcdf-python module для этого:

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

Одним из преимуществ NetCDF-питон модуля является то, что он автоматически корректирует offset, scale, and fill_value в файле NetCDF. Таким образом, массив 4D, считываемый из файла netcdf, будет содержать маскированные значения. Интересно, что маскирование в вашем подходе сделано неправильно. Возможно, вы можете попробовать установить netcdf-python и прочитать свои данные с помощью этого подхода, и, надеюсь, это может помочь. Cheers, Trond

 Смежные вопросы

  • Нет связанных вопросов^_^