Иерархический Формат Данных (HDF4) - универсальный, машинно-независимый стандарт хранения научных данных в файлах, разработанный Национальным центром суперкомпьютерных приложений (NCSA). Для получения дополнительной информации об этих форматах файлов см. документацию HDF на веб-сайте HDF (www.hdfgroup.org
).
HDF-EOS является расширением HDF4, которое было разработано Национальным управлением по аэронавтике и исследованию космического пространства (НАСА) для хранения данных, возвращаемых из Earth Observing System (EOS). Для получения дополнительной информации об этом расширении для HDF4 смотрите документацию HDF-EOS на веб-сайте НАСА (www.hdfeos.org
).
MATLAB® включает несколько опций импорта файлов HDF4, обсуждаемых в следующих разделах.
Примечание
Для получения информации об импорте HDF5 данных, который является отдельным, несовместимым форматом, смотрите Импорт файлов HDF5.
Для импорта данных из файла HDF или HDF-EOS можно использовать функцию высокого уровня HDF4 MATLAB hdfread
. The hdfread
функция предоставляет программный способ импорта данных из файла HDF4 или HDF-EOS, который все еще скрывает многие детали, которые необходимо знать, если вы используете низкоуровневые функции HDF, описанные в Import HDF4 Files Using Low-Level Functions.
В этом разделе описываются эти высокоуровневые функции MATLAB HDF, включая
Чтобы экспортировать данные в файл HDF4, необходимо использовать низкоуровневые функции HDF4 MATLAB.
Чтобы получить информацию о содержимом файла HDF4, используйте hdfinfo
функция. The 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
поле. The 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'
параметр. Значение параметра 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