Чтение данных из файла NetCDF с помощью функций высокого уровня, а затем чтение файла при помощи netcdf упаковать низкоуровневые функции.
Чтение из файла NetCDF с использованием функций высокого уровня
Чтение из файла NetCDF с использованием низкоуровневых функций
Network Common Data Form (NetCDF) - набор библиотек программного обеспечения и независимых от машины форматов данных, поддерживающих создание, доступ и совместное использование ориентированных на массивы научных данных. NetCDF используется в широкой области значений технических и научных областей, которые хотят стандартный способ хранения данных, чтобы их можно было использовать совместно.
MATLAB® функции высокого уровня упрощают процесс импорта данных из файла NetCDF или источника данных NetCDF OPeNDAP. Низкоуровневые функции MATLAB обеспечивают больший контроль над процессом импорта, предоставляя доступ к стандартным программам в библиотеке NetCDF C. Для эффективного использования низкоуровневых функций необходимо ознакомиться с интерфейсом NetCDF C. Документация NetCDF доступна на веб-сайте ЮНИДАТА.
Примечание
Для получения информации об импорте файлов формата общих данных (CDF), которые имеют отдельный, несовместимый формат, смотрите Импорт файлов CDF с использованием низкоуровневых функций.
Настоятельно рекомендуется подключаться только к доверенным серверам OPeNDAP. В R2020b интерфейс MATLAB NetCDF по умолчанию соединяется только с конечными точками протокола доверенного доступа к данным (DAP) путем валидаций сертификата сервера и имени узла. Ранее при доступе к серверу OPeNDAP по умолчанию были отключены как сертификат сервера, так и валидация имени узла.
Если вы хотите отключить сертификат сервера и имя узла валидации, добавьте следующую линию в .dodsrc файл в текущей директории:
[mylocaltestserver.lab] HTTP.SSL.VALIDATE=0
Это делает интерфейс MATLAB NetCDF соединенным с сервером OPeNDAP, имя которого задано в URI mylocaltestserver.lab без выполнения каких-либо валидаций на сертификате сервера или имени узла. Это изменение сохраняется в будущих сеансах работы с MATLAB. Дополнительные сведения о проверке подлинности сервера OPeNDAP и валидации имен узлов см. в разделе Поддержка авторизации netCDF.
В этом примере показано, как отобразить и считать содержимое файла NetCDF с помощью функций высокого уровня.
Отобразите содержимое примера файла NetCDF, example.nc.
ncdisp('example.nc')Source:
\\matlabroot\toolbox\matlab\demos\example.nc
Format:
netcdf4
Global Attributes:
creation_date = '29-Mar-2010'
Dimensions:
x = 50
y = 50
z = 5
Variables:
avagadros_number
Size: 1x1
Dimensions:
Datatype: double
Attributes:
description = 'this variable has no dimensions'
temperature
Size: 50x1
Dimensions: x
Datatype: int16
Attributes:
scale_factor = 1.8
add_offset = 32
units = 'degrees_fahrenheight'
peaks
Size: 50x50
Dimensions: x,y
Datatype: int16
Attributes:
description = 'z = peaks(50);'
Groups:
/grid1/
Attributes:
description = 'This is a group attribute.'
Dimensions:
x = 360
y = 180
time = 0 (UNLIMITED)
Variables:
temp
Size: []
Dimensions: x,y,time
Datatype: int16
/grid2/
Attributes:
description = 'This is another group attribute.'
Dimensions:
x = 360
y = 180
time = 0 (UNLIMITED)
Variables:
temp
Size: []
Dimensions: x,y,time
Datatype: int16ncdisp отображает все группы, размерности и определения переменных в файле. Неограниченные размерности идентифицируются меткой, UNLIMITED.
Считайте данные из peaks переменная.
peaksData = ncread('example.nc','peaks');
Отображение информации о peaksData выход.
whos peaksDataName Size Bytes Class Attributes peaksData 50x50 5000 int16
Чтение description атрибут, сопоставленный с переменной.
peaksDesc = ncreadatt('example.nc','peaks','description')
peaksDesc = z = peaks(50);
Создайте трехмерную объемную поверхностную диаграмму переменных данных. Используйте значение description атрибут как заголовок рисунка.
surf(double(peaksData)) title(peaksDesc);
Чтение description атрибут, сопоставленный с /grid1/ группа. Укажите имя группы как второй вход для ncreadatt функция.
g = ncreadatt('example.nc','/grid1/','description')
g = This is a group attribute.
Прочтите глобальный атрибут, creation_date. Для глобальных атрибутов задайте второй входной параметр ncreadatt как '/'.
creation_date = ncreadatt('example.nc','/','creation_date')
creation_date = 29-Mar-2010
В этом примере показано, как найти все неограниченные размерности в группе в файле NetCDF с помощью функций высокого уровня.
Получите информацию о /grid2/ группа в файле образцов, example.nc, используя ncinfo функция.
ginfo = ncinfo('example.nc','/grid2/')
ginfo =
Filename: '\\matlabroot\toolbox\matlab\demos\example.nc'
Name: 'grid2'
Dimensions: [1x3 struct]
Variables: [1x1 struct]
Attributes: [1x1 struct]
Groups: []
Format: 'netcdf4'
ncinfo возвращает массив структуры, содержащий информацию о группе.
Получите вектор логических значений, которые указывают на неограниченные размерности для этой группы.
unlimDims = [ginfo.Dimensions.Unlimited]
unlimDims =
0 0 1Используйте unlimDims вектор для отображения неограниченной размерности.
disp(ginfo.Dimensions(unlimDims))
Name: 'time'
Length: 0
Unlimited: 1
В этом примере показано, как получить информацию об размерностях, переменных и атрибутах в файле NetCDF с помощью низкоуровневых функций MATLAB в netcdf пакет. Для эффективного использования этих функций необходимо ознакомиться с интерфейсом NetCDF C.
Откройте файл NetCDF
Откройте пример файла NetCDF, example.nc, с использованием netcdf.open с доступом только для чтения.
ncid = netcdf.open('example.nc','NC_NOWRITE')
ncid = 65536
netcdf.open возвращает идентификатор файла.
Получение информации о файле NetCDF
Получите информацию о содержимом файла с помощью netcdf.inq функция. Эта функция соответствует nc_inq функция в библиотеке NetCDF С API.
[ndims,nvars,natts,unlimdimID] = netcdf.inq(ncid)
ndims = 3
nvars = 3
natts = 1
unlimdimID = -1
netcdf.inq возвращает количество размерностей, переменных и глобальных атрибутов в файле и возвращает идентификатор неограниченной размерности в файле. Неограниченная размерность может вырасти.
Получите имя глобального атрибута в файле с помощью netcdf.inqAttName функция. Эта функция соответствует nc_inq_attname функция в библиотеке NetCDF С API. Чтобы получить имя атрибута, необходимо указать идентификатор переменной, с которой связан атрибут, и номер атрибута. Для доступа к глобальному атрибуту, который не связан с определенной переменной, используйте константу 'NC_GLOBAL' как идентификатор переменной.
global_att_name = netcdf.inqAttName(ncid,... netcdf.getConstant('NC_GLOBAL'),0)
global_att_name = 'creation_date'
Получите информацию о типе данных и длине атрибута с помощью netcdf.inqAtt функция. Эта функция соответствует nc_inq_att функция в библиотеке NetCDF С API. Снова задайте идентификатор переменной используя netcdf.getConstant('NC_GLOBAL').
[xtype,attlen] = netcdf.inqAtt(ncid,... netcdf.getConstant('NC_GLOBAL'),global_att_name)
xtype = 2
attlen = 11
Получите значение атрибута, используя netcdf.getAtt функция.
global_att_value = netcdf.getAtt(ncid,... netcdf.getConstant('NC_GLOBAL'),global_att_name)
global_att_value = '29-Mar-2010'
Получите информацию о первой размерности в файле, используя netcdf.inqDim функция. Эта функция соответствует nc_inq_dim функция в библиотеке NetCDF С API. Второй вход для netcdf.inqDim - идентификатор размерности, который представляет собой нулевой индекс, идентифицирующий размерность. Первая размерность имеет значение индекса 0.
[dimname,dimlen] = netcdf.inqDim(ncid,0)
dimname = 'x'
dimlen = 50
netcdf.inqDim возвращает имя и длину размерности.
Получите информацию о первой переменной в файле с помощью netcdf.inqVar функция. Эта функция соответствует nc_inq_var функция в библиотеке NetCDF С API. Второй вход для netcdf.inqVar - идентификатор переменной, который представляет собой нулевой индекс, идентифицирующий переменную. Первая переменная имеет значение индекса 0.
[varname,vartype,dimids,natts] = netcdf.inqVar(ncid,0)
varname = 'avagadros_number'
vartype = 6
dimids =
[]
natts = 1
netcdf.inqVar возвращает имя, тип данных, идентификатор размерности и количество атрибутов, сопоставленных с переменной. Информация о типе данных, возвращенная в vartype - числовое значение констант типа данных NetCDF, таких как NC_INT и NC_BYTE. Для получения информации об этих константах см. документацию NetCDF.
Чтение данных из файла NetCDF
Считайте данные, связанные с переменной, avagadros_number, в файле примера, использование netcdf.getVar функция. Второй вход для netcdf.getVar - идентификатор переменной, который представляет собой нулевой индекс, идентифицирующий переменную. The avagadros_number переменная имеет значение индекса 0.
A_number = netcdf.getVar(ncid,0)
A_number = 6.0221e+23
Просмотрите тип данных A_number.
whos A_numberName Size Bytes Class Attributes A_number 1x1 8 double
Функции в netcdf пакет автоматически выбирает класс MATLAB, который лучше всего соответствует типу данных NetCDF, но можно также задать класс возвращаемых данных с помощью необязательного аргумента netcdf.getVar.
Чтение данных, связанных с avagadros_number и возвращает данные как класс single.
A_number = netcdf.getVar(ncid,0,'single'); whos A_number
Name Size Bytes Class Attributes A_number 1x1 4 single
Закройте файл NetCDF
Закройте файл NetCDF, example.nc.
netcdf.close(ncid)
ncdisp | ncinfo | ncread | ncreadatt