Создавайте, объединяйте и записывайте файлы 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 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)