Работа с виртуальными наборами данных HDF5 (VDS)

Обзор

Виртуальный Набор данных HDF5 (VDS), который функция позволяет вам данным о доступе из набора файлов HDF5 как один, объединенный набор данных, не изменяя, как данные хранятся в исходных файлах. Виртуальные наборы данных могут иметь неограниченные размерности и сопоставить с исходными наборами данных с неограниченными размерностями. Это отображение позволяет Виртуальному Набору данных расти в зависимости от времени, когда его базовые исходные наборы данных изменяются в размере.

Функция VDS была введена в версии 1.10 библиотеки HDF5. Чтобы использовать VDS, необходимо быть знакомы с моделью программирования HDF5 VDS. Для получения дополнительной информации см. Виртуальную документацию Набора данных HDF5 относительно веб-сайта HDF Group.

Примечание

MATLAB® версии ранее, чем R2021b не могут считать Виртуальные Наборы данных HDF5.

Создайте виртуальный набор данных

Выполните эти общие шаги для создания Виртуального Набора данных:

  1. Создайте наборы данных, которые включают VDS (исходные наборы данных) (дополнительный).

  2. Создайте VDS.

    1. Задайте тип данных.

    2. Задайте пространство данных.

    3. Задайте список свойств создания набора данных.

    4. Сопоставьте элементы от исходных наборов данных до элементов VDS.

      1. Выполните итерации по исходным наборам данных.

        1. Выберите элементы в исходном наборе данных (исходный выбор).

        2. Выберите элементы в Виртуальном Наборе данных (целевой выбор).

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

      2. Закончите итерацию.

    5. Вызовите H5D.create использование заданных свойств.

  3. Доступ к VDS как регулярный набор данных HDF5.

  4. Закройте VDS по окончании.

Примечание

Библиотека HDF5 C использует упорядоченное расположение C-стиля для многомерных массивов, тогда как MATLAB использует упорядоченное расположение FORTRAN-style. Для получения дополнительной информации смотрите Размерности Набора данных Отчета.

Работа с удаленно сохраненными виртуальными наборами данных

Можно использовать низкоуровневые HDF5 функции MATLAB, чтобы создать и считать Виртуальные Наборы данных, сохраненные в удаленных местоположениях, таких как Amazon S3™ и Windows Azure® Сервис блоба. Используйте высокоуровневые HDF5 функции, чтобы считать и получить доступ к информации о Виртуальных Наборах данных, сохраненных в удаленных местоположениях.

Когда доступ к Виртуальному Набору данных сохранил в удаленном месте, необходимо задать полный путь с помощью универсального локатора ресурса (URL). Например, отобразите метаданные файла HDF5, хранившего на Amazon S3.

h5disp('s3://bucketname/path_to_file/my_VDSdata.h5'); 

Для получения дополнительной информации о подготовке MATLAB, чтобы получить доступ к вашему сервису оперативного хранения, смотрите работу с Удаленными данными.

Создайте виртуальный набор данных из наборов данных различных размеров

Создайте Виртуальный Набор данных HDF5 из наборов данных различных размеров и с не сочетающейся группой и именами набора данных. Данные о вертикальном изменении в этих трех наборах данных сгенерированы от peaks MATLAB функция.

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

Восстановите топографический профиль с тремя непересекающимися наборами данных. Точки выборки от этих трех наборов данных являются overlayed на топографическом профиле согласно их пространственным координатам. И в графиках, оси X и Y представляют долготы и в широты, соответственно, с широтами, увеличивающимися в направлении Y.

Отобразите информацию об этих трех наборах данных в файлах data_W.h5, data_NE.h5, data_SE.h5. h5disp функционируйте информация об отображениях о наборах данных, включая их имена, типы данных, размерности и группы, которым они принадлежат.

h5disp("data_W.h5")
HDF5 data_W.h5 
Group '/' 
    Group '/data' 
        Dataset 'elevation' 
            Size:  20x10
            MaxSize:  20x10
            Datatype:   H5T_IEEE_F64LE (double)
            ChunkSize:  []
            Filters:  none
            FillValue:  0.000000
h5disp("data_NE.h5")
HDF5 data_NE.h5 
Group '/' 
    Dataset 'z' 
        Size:  11x12
        MaxSize:  11x12
        Datatype:   H5T_IEEE_F64LE (double)
        ChunkSize:  []
        Filters:  none
        FillValue:  0.000000
h5disp("data_SE.h5")
HDF5 data_SE.h5 
Group '/' 
    Dataset 'Elev' 
        Size:  9x13
        MaxSize:  9x13
        Datatype:   H5T_IEEE_F64LE (double)
        ChunkSize:  []
        Filters:  none
        FillValue:  0.000000

Создайте пространство данных и список свойств создания для Виртуального Набора данных. Затем сопоставьте каждый набор данных с виртуальным пространством данных с помощью упорядоченного расположения размерностей C-стиля и основанной на нуле индексации.

Например, нижний левый угол блока данных для Северо-восточной области соответствует индексам MATLAB [10 11]. Чтобы преобразовать эти индексы в упорядоченный C-стиль, основанные на нуле индексы, инвертируйте индексы [10 11] и вычтите значение 1. Получившимися индексами запуска является [10 9].

% Define the fill value and specify the file access property list identifier.
fillValue = NaN;
faplID = H5P.create('H5P_FILE_ACCESS');

% Create the file for the Virtual Dataset.
vdsFileID = H5F.create('data_VDS.h5','H5F_ACC_TRUNC','H5P_DEFAULT',faplID);

% Define the datatype and dataspace.
datatypeID = H5T.copy('H5T_NATIVE_DOUBLE');
vdsDataspaceID = H5S.create_simple(2,[24 20],[]);

% Initialize Virtual Dataset creation property list with virtual layout and fill value.
vdsDcplID = H5P.create('H5P_DATASET_CREATE');
H5P.set_layout(vdsDcplID,'H5D_VIRTUAL');
H5P.set_fill_value(vdsDcplID,datatypeID,fillValue);

% Perform full dataset mapping for three individual source datasets.

% Map '/data/elevation' from data_W.h5 to the Virtual Dataset.
srcDataspaceID_W = H5S.create_simple(2,[10 20],[]);
H5S.select_hyperslab(vdsDataspaceID,'H5S_SELECT_SET',[0 0],[],[],[10 20]);
H5P.set_virtual(vdsDcplID, vdsDataspaceID,'data_W.h5','/data/elevation',srcDataspaceID_W);

% Map '/z' from data_NE.h5 to the Virtual Dataset.
srcDataspaceID_NE = H5S.create_simple(2,[12 11],[]);
H5S.select_hyperslab(vdsDataspaceID,'H5S_SELECT_SET',[10 9],[],[],[12 11]);
H5P.set_virtual(vdsDcplID,vdsDataspaceID,'data_NE.h5','/z',srcDataspaceID_NE);

% Map '/Elev' from data_SE.h5 to the Virtual Dataset.
srcDataspaceID_SE = H5S.create_simple(2,[13 9],[]);
H5S.select_hyperslab(vdsDataspaceID,'H5S_SELECT_SET',[11 0],[],[],[13 9]);
H5P.set_virtual(vdsDcplID,vdsDataspaceID,'data_SE.h5','/Elev',srcDataspaceID_SE);

Создайте файл HDF5 и Виртуальный Набор данных /elevation, и затем закройте все открытые ресурсы.

% Call H5D.create using the defined properties.
vdsDatasetID = H5D.create(vdsFileID,'/elevation',datatypeID,vdsDataspaceID,'H5P_DEFAULT',vdsDcplID,'H5P_DEFAULT');

% Close open resources.
H5D.close(vdsDatasetID);
H5S.close(srcDataspaceID_SE);
H5S.close(srcDataspaceID_NE);
H5S.close(srcDataspaceID_W);
H5P.close(vdsDcplID);
H5S.close(vdsDataspaceID);
H5T.close(datatypeID);
H5F.close(vdsFileID);
H5P.close(faplID);

Считайте Виртуальный Набор данных и постройте его.

Получившийся график похож на исходный график топографической карты, за исключением областей, где данные отсутствуют из-за непересекающихся наборов данных.

% Read elevations using the low-level interface.
vdsFileID = H5F.open('data_VDS.h5','H5F_ACC_RDONLY','H5P_DEFAULT');
vdsDatasetID = H5D.open(vdsFileID,'/elevation','H5P_DEFAULT');
elevation = H5D.read(vdsDatasetID,'H5ML_DEFAULT','H5S_ALL','H5S_ALL','H5P_DEFAULT');
H5D.close(vdsDatasetID);
H5F.close(vdsFileID);
contourf(elevation,10);

Отобразите содержимое Виртуального файла Набора данных.

h5disp('data_VDS.h5')
HDF5 data_VDS.h5 
Group '/' 
    Dataset 'elevation' 
        Size:  20x24
        MaxSize:  20x24
        Datatype:   H5T_IEEE_F64LE (double)
        ChunkSize:  []
        Filters:  none
        FillValue:  NaN

Можно выполнить операции I/O на Виртуальном Наборе данных. Например, считайте гиперплиту данных из /elevation набор данных с помощью h5read функция в высокоуровневом интерфейсе.

sample = h5read('data_VDS.h5','/elevation',[1 1],[5 6],[4 4])
sample = 5×6

    0.0007    0.0102    0.0823    0.3265    0.0765    0.0059
    0.0028    0.0331    0.3023    2.9849    0.1901    0.4741
    0.1661    3.3570    2.5482    1.3171    4.8474    3.3676
    0.1915    3.9606    1.1585    0.9892    3.9113    2.5722
    0.0151    0.2633    1.0373    2.5380    0.9625    0.2401

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

| |