exponenta event banner

Импорт файлов NetCDF и данных OPeNDAP

Считывание данных из файла NetCDF с помощью функций высокого уровня, а затем считывание файла с помощью netcdf пакетные низкоуровневые функции.

Возможности MATLAB NetCDF

Network Common Data Form (NetCDF) - это набор программных библиотек и машинно-независимых форматов данных, которые поддерживают создание, доступ и совместное использование ориентированных на массив научных данных. NetCDF используется широким спектром технических и научных областей, в которых требуется стандартный способ хранения данных для совместного использования.

Функции высокого уровня MATLAB ® упрощают процесс импорта данных из файла NetCDF или источника данных OPeNDAP NetCDF. Низкоуровневые функции MATLAB обеспечивают больший контроль над процессом импорта, предоставляя доступ к подпрограммам в библиотеке NetCDF C. Для эффективного использования низкоуровневых функций необходимо ознакомиться с интерфейсом NetCDF C. С документацией по NetCDF можно ознакомиться на веб-сайте Unidata.

Примечание

Сведения об импорте файлов общего формата данных (CDF), имеющих отдельный несовместимый формат, см. в разделе Импорт файлов CDF с использованием низкоуровневых функций.

Вопросы безопасности при подключении к серверу OPeNDAP

Настоятельно рекомендуется подключаться только к доверенным серверам OPeNDAP. В R2020b интерфейс MATLAB NetCDF по умолчанию подключается только к конечным точкам протокола доверенного доступа к данным (DAP) путем проверки сертификата сервера и имени хоста. Ранее при обращении к серверу OPeNDAP проверка сертификата сервера и имени хоста по умолчанию была отключена.

Если вы хотите отключить проверку сертификата сервера и имени хоста, добавьте следующую строку в .dodsrc файл в текущем каталоге:

[mylocaltestserver.lab] HTTP.SSL.VALIDATE=0

Это делает интерфейс MATLAB NetCDF подключенным к серверу OPeNDAP, имя которого указано в URI mylocaltestserver.lab без выполнения проверки сертификата сервера или имени хоста. Это изменение сохраняется в будущих сессиях MATLAB. Дополнительные сведения о проверке подлинности сервера OPeNDAP и имени хоста см. в разделе Поддержка авторизации NetCDF.

Чтение из файла 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:   int16

ncdisp отображает все группы, размеры и определения переменных в файле. Неограниченные размеры идентифицируются меткой, UNLIMITED.

Считывание данных из peaks переменная.

peaksData  = ncread('example.nc','peaks');

Отображение информации о peaksData выход.

whos peaksData
  Name            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

В этом примере показано, как найти все неограниченные размеры в группе в файле 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 с использованием низкоуровневых функций

В этом примере показано, как получить информацию об измерениях, переменных и атрибутах в файле 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 в API библиотеки NetCDF.

[ndims,nvars,natts,unlimdimID] = netcdf.inq(ncid)
ndims = 3
nvars = 3
natts = 1
unlimdimID = -1

netcdf.inq возвращает количество измерений, переменных и глобальных атрибутов в файле, а также идентификатор неограниченного измерения в файле. Неограниченное измерение может вырасти.

Получение имени глобального атрибута в файле с помощью netcdf.inqAttName функция. Эта функция соответствует nc_inq_attname в API библиотеки NetCDF. Чтобы получить имя атрибута, необходимо указать идентификатор переменной, с которой связан атрибут, и номер атрибута. Для доступа к глобальному атрибуту, который не связан с определенной переменной, используйте константу 'NC_GLOBAL' в качестве идентификатора переменной.

global_att_name = netcdf.inqAttName(ncid,...
    netcdf.getConstant('NC_GLOBAL'),0)
global_att_name = 
'creation_date'

Получение информации о типе данных и длине атрибута с помощью netcdf.inqAtt функция. Эта функция соответствует nc_inq_att в API библиотеки NetCDF. Снова укажите идентификатор переменной с помощью 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 в API библиотеки NetCDF. Второй вход в netcdf.inqDim - идентификатор измерения, который представляет собой отсчитываемый от нуля индекс, идентифицирующий измерение. Первое измерение имеет значение индекса 0.

[dimname,dimlen] = netcdf.inqDim(ncid,0)
dimname = 
'x'
dimlen = 50

netcdf.inqDim возвращает имя и длину измерения.

Получение информации о первой переменной в файле с помощью netcdf.inqVar функция. Эта функция соответствует nc_inq_var в API библиотеки NetCDF. Второй вход в 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 - идентификатор переменной, который представляет собой отсчитываемый от нуля индекс, идентифицирующий переменную. avagadros_number переменная имеет значение индекса 0.

A_number = netcdf.getVar(ncid,0)
A_number = 6.0221e+23

Просмотр типа данных A_number.

whos A_number
  Name          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)

См. также

| | |

Связанные темы

Внешние веб-сайты