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