Экспорт в файлы NetCDF

Создайте, объедините и запишите файлы NetCDF с помощью высокоуровневых функций и низкоуровневых функций пакета netcdf.

Возможности MATLAB NetCDF

Сетевая Форма Общих данных (NETCDF) является набором библиотек программного обеспечения и машинно-независимых форматов данных, которые поддерживают создание, доступ и совместное использование ориентированных на массив научных данных. NetCDF используется широким спектром технических и научных полей, которые хотят стандартный способ хранить данные так, чтобы это могло быть совместно использовано.

Высокоуровневые функции MATLAB® дают возможность экспортировать данные в файл NetCDF. Низкоуровневые функции MATLAB обеспечивают доступ к стандартным программам в библиотеке NetCDF C. Чтобы использовать низкоуровневые функции эффективно, необходимо быть знакомы с Интерфейсом NetCDF C. Документация NetCDF доступна в веб-сайте Unidata.

Примечание

Для получения информации об экспорте в файлы Формата общих данных (CDF), которые имеют отдельный и несовместимый формат, смотрите Экспорт в CDF-файлы.

Создание нового файла NetCDF из существующего файла или шаблона

Этот пример показывает, как создать новый файл NetCDF, который содержит переменную, размерность и определения группы существующего файла, но использует другой формат.

Создайте файл, содержащий одну переменную, с помощью функции nccreate.

nccreate('myfile.nc','myvar')

Запишите данные к файлу.

A = 99;
ncwrite('myfile.nc','myvar',A)

Считайте переменную, размерность и определения группы из файла с помощью ncinfo. Эта информация задает схему файла.

S = ncinfo('myfile.nc');

Получите формат файла.

file_fmt = S.Format
file_fmt = 
'netcdf4_classic'

Измените значение поля Format в структуре, S, другому поддержал формат NetCDF.

S.Format = 'netcdf4';

Создайте новую версию файла, который использует новый формат, с помощью функции ncwriteschema. Схема задает структуру файла, но не содержит ни одних из данных, которые были в исходном файле.

ncwriteschema('newfile.nc',S)
S = ncinfo('newfile.nc');

Примечание: Когда вы преобразовываете формат файла с помощью ncwriteschema, вы можете получить предупреждающее сообщение, если исходный формат файла включает поля, которые не поддержаны новым форматом. Например, netcdf4 значения заливки поддержек формата, но формат классики NetCDF не делают. В этих случаях ncwriteschema все еще создает файл, но не использует поле, которое не определено в новом формате.

Просмотрите формат нового файла.

new_fmt = S.Format
new_fmt = 
'netcdf4'

Новый файл, newfile.nc, содержит переменную и определения размерности myfile.nc, но не содержит данные.

Запишите данные к новому файлу.

ncwrite('newfile.nc','myvar',A)

Слияние двух файлов NetCDF

Этот пример показывает, как объединить два файла NetCDF с помощью высокоуровневых функций. Объединенный файл содержит переменную и определения размерности файлов, которые объединены, но не содержит данные в этих исходных файлах.

Создайте файл с именем NetCDF ex1.nc и задайте переменную под названием myvar. Затем запишите данные к переменной и отобразите содержимое файла.

nccreate('ex1.nc','myvar');
ncwrite('ex1.nc','myvar',55)
ncdisp('ex1.nc')
Source:
           pwd\ex1.nc
Format:
           netcdf4_classic
Variables:
    myvar
           Size:       1x1
           Dimensions: 
           Datatype:   double

Создайте второй файл и задайте переменную под названием myvar2. Затем запишите данные к переменной и отобразите содержимое файла.

nccreate('ex2.nc','myvar2');
ncwrite('ex2.nc','myvar2',99)
ncdisp('ex2.nc')
Source:
           pwd\ex2.nc
Format:
           netcdf4_classic
Variables:
    myvar2
           Size:       1x1
           Dimensions: 
           Datatype:   double

Получите схему каждого из файлов, с помощью функции ncinfo.

info1 = ncinfo('ex1.nc')
info1 = 

      Filename: 'pwd\ex1.nc'
          Name: '/'
    Dimensions: []
     Variables: [1x1 struct]
    Attributes: []
        Groups: []
        Format: 'netcdf4_classic'
info2 = ncinfo('ex2.nc')
info2 = 

      Filename: 'pwd\ex2.nc'
          Name: '/'
    Dimensions: []
     Variables: [1x1 struct]
    Attributes: []
        Groups: []
        Format: 'netcdf4_classic'

Создайте новый файл NetCDF, который использует схему первого файла в качестве примера, с помощью функции ncwriteschema. Затем отобразите содержимое файла.

ncwriteschema('combined.nc',info1)
ncdisp('combined.nc')
Source:
           pwd\combined.nc
Format:
           netcdf4_classic
Variables:
    myvar
           Size:       1x1
           Dimensions: 
           Datatype:   double
           Attributes:
                       _FillValue = 9.969209968386869e+36

Добавьте схему от ex2.nc до combined.nc, с помощью ncwriteschema.

ncwriteschema('combined.nc',info2)

Просмотрите содержимое объединенного файла.

ncdisp('combined.nc')
Source:
           pwd\combined.nc
Format:
           netcdf4_classic
Variables:
    myvar 
           Size:       1x1
           Dimensions: 
           Datatype:   double
           Attributes:
                       _FillValue = 9.969209968386869e+36
    myvar2
           Size:       1x1
           Dimensions: 
           Datatype:   double
           Attributes:
                       _FillValue = 9.969209968386869e+36

Файл содержит переменную myvar, заданную в первом файле в качестве примера и переменной myvar2, заданной во втором файле.

Запись данных к файлу NetCDF Используя низкоуровневые функции

Этот пример показывает, как использовать низкоуровневые функции, чтобы записать данные к файлу NetCDF. Низкоуровневые функции MATLAB® обеспечивают доступ к стандартным программам в библиотеке NetCDF C. MATLAB группирует функции в пакет, названный netcdf. Чтобы вызвать одну из функций в пакете, необходимо снабдить префиксом имя функции имя пакета.

Использовать MATLAB NetCDF функционирует эффективно, необходимо быть знакомы с информацией об Интерфейсе NetCDF C.

Чтобы запустить этот пример, у вас должно быть разрешение записи в вашей текущей папке.

Создайте 1 50 переменная числовых значений под названием my_data в рабочем пространстве MATLAB. Вектор имеет класс double.

my_data = linspace(0,49,50);

Создайте файл с именем NetCDF my_file.nc, с помощью функции netcdf.create. Параметр NOCLOBBER является доступом к файлу NetCDF, постоянным, который указывает, что вы не хотите перезаписывать существующий файл с тем же именем.

ncid = netcdf.create('my_file.nc','NOCLOBBER');

netcdf.create возвращает идентификатор файла, ncid. Когда вы создаете файл NetCDF, файл открывается в режиме define. Необходимо быть в режиме define, чтобы задать размерности и переменные.

Задайте размерность в файле, с помощью функции netcdf.defDim. Эта функция соответствует функции nc_def_dim в API библиотеки NetCDF C. Необходимо задать размерности в файле, прежде чем можно будет задать переменные и записать данные к файлу. В этом случае задайте размерность под названием my_dim с длиной 50.

dimid = netcdf.defDim(ncid,'my_dim',50)
dimid = 0

netcdf.defDim возвращает идентификатор размерности, который соответствует новой размерности. Идентификаторы являются основанными на нуле индексами.

Задайте переменную под названием my_var на размерности, с помощью функции netcdf.defVar. Эта функция соответствует функции nc_def_var в API библиотеки NetCDF C. Задайте тип данных NetCDF переменной, в этом случае, NC_BYTE.

varid = netcdf.defVar(ncid,'my_var','NC_BYTE',dimid)
varid = 0

netcdf.defVar возвращает идентификатор переменной, который соответствует my_var.

Выньте файл NetCDF из режима define. Чтобы записать данные к файлу, необходимо быть в режиме данных.

netcdf.endDef(ncid)

Запишите данные из рабочего пространства MATLAB в переменную в файле NetCDF, с помощью функции netcdf.putVar. Данные в рабочей области имеют класс double, но переменная в файле NetCDF имеет тип NC_BYTE. Функции MATLAB NetCDF автоматически делают преобразование.

netcdf.putVar(ncid,varid,my_data)

Закройте файл, с помощью функции netcdf.close.

netcdf.close(ncid)

Проверьте, что данные были записаны в файл путем открытия файла и чтения данных из переменной в новую переменную в рабочем пространстве MATLAB.

ncid2 = netcdf.open('my_file.nc','NC_NOWRITE');
x = netcdf.getVar(ncid2,0);

Просмотрите тип данных x.

whos x
  Name       Size            Bytes  Class    Attributes

  x         50x1                50  int8               

MATLAB хранит данные в порядке развертывания по столбцам, в то время как NetCDF C API использует главный строкой порядок. x представляет данные, хранимые в файле NetCDF, и поэтому 50 на 1 даже при том, что исходный вектор в рабочем пространстве MATLAB, my_data, 1 50. Поскольку вы хранили данные в файле NetCDF как NC_BYTE, MATLAB считывает данные из переменной в рабочую область как класс int8.

Закройте файл.

netcdf.close(ncid2)

Смотрите также

Похожие темы

Внешние веб-сайты