Создание, слияние и запись файлов NetCDF с помощью функций высокого уровня и netcdf пакетные низкоуровневые функции.
Создание нового файла NetCDF из существующего файла или шаблона
Запись данных в файл NetCDF с помощью низкоуровневых функций
Network Common Data Form (NetCDF) - это набор программных библиотек и машинно-независимых форматов данных, которые поддерживают создание, доступ и совместное использование ориентированных на массив научных данных. NetCDF используется широким спектром технических и научных областей, в которых требуется стандартный способ хранения данных для совместного использования.
Высокоуровневые функции MATLAB ® упрощают экспорт данных в файл netCDF. Низкоуровневые функции MATLAB обеспечивают доступ к подпрограммам в библиотеке NetCDF C. Для эффективного использования низкоуровневых функций необходимо ознакомиться с интерфейсом NetCDF C. С документацией по NetCDF можно ознакомиться на веб-сайте Unidata.
Примечание
Сведения об экспорте в файлы общего формата данных (CDF), имеющие отдельный и несовместимый формат, см. в разделе Экспорт в файлы CDF.
В этом примере показано, как создать новый файл 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 с именем 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. Низкоуровневые функции 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 xName 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)