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