Иерархический формат данных (HDF4) - универсальный, машинно-независимый стандарт хранения научных данных в файлах, разработанный Национальным центром суперкомпьютерных приложений (NCSA). Дополнительные сведения об этих форматах файлов см. в документации HDF на веб-сайте HDF (www.hdfgroup.org).
HDF-EOS - это расширение HDF4, которое было разработано Национальным управлением по аэронавтике и исследованию космического пространства (NASA) для хранения данных, возвращаемых из Системы наблюдения Земли (EOS). Дополнительные сведения об этом расширении для HDF4 см. в документации HDF-EOS на веб-сайте НАСА (www.hdfeos.org).
MATLAB ® включает несколько вариантов импорта файлов HDF4, описанных в следующих разделах.
Примечание
Сведения об импорте данных HDF5, который является отдельным несовместимым форматом, см. в разделе Импорт файлов HDF5.
Для импорта данных из файла HDF или HDF-EOS можно использовать функцию высокого уровня MATLAB HDF4 hdfread. hdfread функция обеспечивает программный способ импорта данных из файла HDF4 или HDF-EOS, который по-прежнему скрывает многие сведения, необходимые для использования низкоуровневых функций HDF, описанных в разделе Импорт файлов HDF4 с использованием низкоуровневых функций.
В этом разделе описываются эти высокоуровневые функции MATLAB HDF, включая
Для экспорта данных в файл HDF4 необходимо использовать низкоуровневые функции MATLAB HDF4.
Для получения информации о содержимом файла HDF4 используйте hdfinfo функция. hdfinfo функция возвращает структуру, содержащую информацию о файле и данные в файле.
В этом примере возвращается информация о примере файла HDF4, включенного в MATLAB:
info = hdfinfo('example.hdf')
info =
Filename: 'matlabroot\example.hdf'
Attributes: [1x2 struct]
Vgroup: [1x1 struct]
SDS: [1x1 struct]
Vdata: [1x1 struct]Для получения информации о наборах данных, хранящихся в файле, см. SDS поле.
Для использования hdfread необходимо указать набор данных, который требуется прочитать. Можно указать имя файла и имя набора данных в качестве аргументов или структуру, возвращаемую hdfinfo , которая содержит эту информацию. В следующем примере показаны оба метода. Сведения об импорте подмножества данных из набора данных см. в разделе Чтение подмножества данных из набора данных.
Определите имена наборов данных в файле HDF4, используя hdfinfo функция.
info = hdfinfo('example.hdf')
info =
Filename: 'matlabroot\example.hdf'
Attributes: [1x2 struct]
Vgroup: [1x1 struct]
SDS: [1x1 struct]
Vdata: [1x1 struct]Чтобы определить имена и другую информацию о наборах данных в файле, просмотрите содержимое SDS поле. Name поле в структуре SDS содержит имя набора данных.
dsets = info.SDS
dsets =
Filename: 'example.hdf'
Type: 'Scientific Data Set'
Name: 'Example SDS'
Rank: 2
DataType: 'int16'
Attributes: []
Dims: [2x1 struct]
Label: {}
Description: {}
Index: 0Считывание набора данных из файла HDF4 с помощью hdfread функция. Укажите имя набора данных в качестве параметра функции. Обратите внимание, что имя набора данных чувствительно к регистру. В этом примере возвращается массив 16 на 5:
dset = hdfread('example.hdf', 'Example SDS')
dset =
3 4 5 6 7
4 5 6 7 8
5 6 7 8 9
6 7 8 9 10
7 8 9 10 11
8 9 10 11 12
9 10 11 12 13
10 11 12 13 14
11 12 13 14 15
12 13 14 15 16
13 14 15 16 17
14 15 16 17 18
15 16 17 18 19
16 17 18 19 20
17 18 19 20 21
18 19 20 21 22Кроме того, можно указать определенное поле в структуре, возвращаемой hdfinfo который содержит эту информацию. Например, чтобы прочитать набор научных данных, используйте SDS поле.
dset = hdfread(info.SDS);
Чтение подмножества данных в наборе данных. Для чтения подмножества набора данных можно воспользоваться опциональным 'index' параметр. Значение параметра индекса представляет собой массив ячеек из трех векторов, которые определяют местоположение в наборе данных для начала считывания, интервал пропуска (например, считывание каждого другого элемента данных) и объем данных для считывания (например, длину вдоль каждого измерения). В HDF4 терминологии эти параметры называются значениями начала, шага и края.
Например, этот код
Начинает считывание данных в третьей строке, третьем столбце ([3 3]).
Считывает каждый элемент массива ([]).
Читает 10 строк и 2 столбца ([10 2]).
subset = hdfread('Example.hdf','Example SDS',... 'Index',{[3 3],[],[10 2 ]})
subset =
7 8
8 9
9 10
10 11
11 12
12 13
13 14
14 15
15 16
16 17