exponenta event banner

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

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

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

Network Common Data Form (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 файл открывается в режиме определения. Для определения размеров и переменных необходимо находиться в режиме определения.

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

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

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

Определение переменной с именем my_var на размере, используя netcdf.defVar функция. Эта функция соответствует nc_def_var в API библиотеки NetCDF. Укажите тип данных 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 хранит данные в порядке «основной столбец», в то время как API NetCDF C использует порядок «большая строка». x представляет данные, хранящиеся в файле NetCDF и, следовательно, 50 на 1, даже если исходный вектор в рабочей области MATLAB, my_data, 1 на 50. Поскольку данные хранятся в файле NetCDF как NC_BYTEMATLAB считывает данные из переменной в рабочую область как класс int8.

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

netcdf.close(ncid2)

Связанные темы

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