Создайте, объедините и запишите файлы NetCDF с помощью высокоуровневых функций и низкоуровневых функций пакета netcdf
.
Создание нового файла NetCDF из существующего файла или шаблона
Запись данных к файлу NetCDF Используя низкоуровневые функции
Сетевая Форма Общих данных (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, файл открывается в режиме define. Необходимо быть в режиме define, чтобы задать размерности и переменные.
Задайте размерность в файле, с помощью функции netcdf.defDim
. Эта функция соответствует функции nc_def_dim
в API библиотеки NetCDF C. Необходимо задать размерности в файле, прежде чем можно будет задать переменные и записать данные к файлу. В этом случае задайте размерность под названием my_dim
с длиной 50.
dimid = netcdf.defDim(ncid,'my_dim',50)
dimid = 0
netcdf.defDim
возвращает идентификатор размерности, который соответствует новой размерности. Идентификаторы являются основанными на нуле индексами.
Задайте переменную под названием my_var
на размерности, с помощью функции netcdf.defVar
. Эта функция соответствует функции nc_def_var
в API библиотеки NetCDF C. Задайте тип данных NetCDF переменной, в этом случае, NC_BYTE
.
varid = netcdf.defVar(ncid,'my_var','NC_BYTE',dimid)
varid = 0
netcdf.defVar
возвращает идентификатор переменной, который соответствует my_var
.
Выньте файл NetCDF из режима define. Чтобы записать данные к файлу, необходимо быть в режиме данных.
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)