преобразование 1d массива в netcdf - PullRequest
0 голосов
/ 16 октября 2019

У меня есть массив 1d, который является часовым набором данных временного ряда, включающим 49090 точек, который необходимо преобразовать в формат netcdf.

В приведенном ниже коде result_u2 является массивом 1d, в котором хранятся результаты цикла for,Имеет 49090 точек данных.

nhours = 49091;#one added to no of datapoints
unout.units = 'hours since 2012-10-20 00:00:00'
unout.calendar = 'gregorian'
ncout = Dataset('output.nc','w','NETCDF3');  
ncout.createDimension('time',nhours); 
datesout = [datetime.datetime(2012,10,20,0,0,0)+n*timedelta(hours=1) for n in range(nhours)]; # create datevalues
timevar = ncout.createVariable('time','float64',('time'));timevar.setncattr('units',unout);timevar[:]=date2num(datesout,unout);
winds = ncout.createVariable('winds','float32',('time',));winds.setncattr('units','m/s');winds[:] = result_u2;
ncout.close()

Я новичок в программировании. Код, который я пробовал выше, должен быть в состоянии написать файл nc, но во время выполнения сценария файл nc не создается. Пожалуйста, помогите.

1 Ответ

0 голосов
/ 16 октября 2019

Я бы посоветовал взглянуть на синтаксис Python в целом, если вы хотите использовать его / пакет netCDF4. Например, в коде Python нет точек с запятой.

Ознакомьтесь с документацией API - учебник, который вы там найдете, в основном охватывает то, что вы спрашиваете. Тогда ваш код может выглядеть как

import datetime
import netCDF4

# using "with" syntax so you don't have to do the cleanup:
with netCDF4.Dataset('output.nc', 'w', format='NETCDF3_CLASSIC') as ncout:
    # create time dimension
    nhours = 49091
    time = ncout.createDimension('time', nhours)

    # create the time variable
    times = ncout.createVariable('time', 'f8', ('time',))
    times.units = 'hours since 2012-10-20 00:00:00'
    times.calendar = 'gregorian'

    # fill time
    dates = [datetime.datetime(2012,10,20,0,0,0)+n*datetime.timedelta(hours=1) for n in range(nhours)]
    times[:] = netCDF4.date2num(dates, units=times.units, calendar=times.calendar)

    # create variable 'wind', dependent on time
    wind = ncout.createVariable('wind', 'f8', ('time',))
    wind.units = 'm/s'
    # fill with data, using your 1d array here:
    wind[:] = result_u2 
...