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

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

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

Сетевая Форма Общих данных (NETCDF) является набором библиотек программного обеспечения и машинно-независимых форматов данных, которые поддерживают создание, доступ и совместное использование ориентированных на массив научных данных. NetCDF используется широким спектром технических и научных полей, которые хотят стандартный способ хранить данные так, чтобы это могло быть совместно использовано.

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

Примечание

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

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

Создайте 3D объемную поверхностную диаграмму переменных данных. Используйте значение атрибута 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 C.

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

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

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

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

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

Получите информацию о первой переменной в файле с помощью функции netcdf.inqVar. Эта функция соответствует функции nc_inq_var в API библиотеки NetCDF C. Второй вход к netcdf.inqVar является идентификатором переменной, который является основанным на нуле индексом, который идентифицирует переменную. Первая переменная имеет индексное значение 0.

[varname,vartype,dimids,natts] = netcdf.inqVar(ncid,0)
varname = 
'avagadros_number'
vartype = 6
dimids =

     []
natts = 1

netcdf.inqVar возвращает имя, тип данных, ID размерности и количество атрибутов, сопоставленных с переменной. Информацией о типе данных, возвращенной в 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)

Смотрите также

| | | |

Похожие темы

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