Как разрезать и перебрать переменную netCDF в Python? - PullRequest
0 голосов
/ 06 июля 2018

У меня есть переменная netCDF с 372 временными шагами, мне нужно нарезать эту переменную, чтобы прочитать каждый отдельный временной шаг для последующей обработки.

Я использовал glob. читать в моих 12 файлах netCDF и затем определить переменные.

NAME_files = glob.glob('RGL*nc')
NAME_files = NAME_files[0:12]

for n in (NAME_files):    
    RGL = Dataset(n, mode='r')
    footprint = RGL.variables['fp'][:]
    lons = RGL.variables['lon'][:]
    lats = RGL.variables['lat'][:]

Теперь мне нужно повторить приведенный ниже код в цикле для каждого из 372 временных шагов переменной 'footprint'.

footprint_2 =  RGL.variables['fp'][:,:,1:2]

Я новичок в Python и плохо разбираюсь в циклах. Буду признателен за любую помощь, в том числе лучшее объяснение / описание моей проблемы.

1 Ответ

0 голосов
/ 06 июля 2018

Вам необходимо определить как размеры, так и форму переменной fp для правильного доступа к ней.

Я делаю здесь предположения об этих значениях.

Ваш код подразумевает 3 измерения: время, долг, лат. Снова просто предполагая.

footprint_2 =  RGL.variables['fp'][:,:,1:2]

Но приведенный выше код получает все время, все долготы, за 1 широту. Срез 1: 2 выбирает 1 значение.

fp_dims = RGL.variables['fp'].dimensions
print(fp_dims)
# a tuple of dimesions names
 (u'time', u'lon', u'lat')

fp_shape = RGL.variables['fp'].shape

# a tuple of dimesions sizes or lengths
print(fp_shape)
 (372, 30, 30)

len = fp_shape[0]

for time_idx in range(0,len)):
  # you don't say if you want a single lon,lat or all the lon,lat's for a given time step.
  test = RGL.variables['fp'][time_idx,:,:]
  # or if you really want this:
  test = RGL.variables['fp'][time_idx,:,1:2]
  # or a single lon, lat
  test = RGL.variables['fp'][time_idx,8,8]
...