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

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

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

Network Common Data Form (NetCDF) - набор библиотек программного обеспечения и независимых от машины форматов данных, поддерживающих создание, доступ и совместное использование ориентированных на массивы научных данных. NetCDF используется в широкой области значений технических и научных областей, которые хотят стандартный способ хранения данных, чтобы их можно было использовать совместно.

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

Примечание

Дополнительные сведения об экспорте в файлы формата общих данных (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 функция. The NOCLOBBER параметр является константой доступа к файлам NetCDF, которая указывает, что вы не хотите перезаписывать существующий файл с таким же именем.

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

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

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

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

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

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

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

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

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

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_BYTEMATLAB читает данные из переменной в рабочую область как класс int8.

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

netcdf.close(ncid2)

Похожие темы

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