工作与HDF5虚拟数据集(VDS)
概述
HDF5虚拟数据集(VDS)特性允许您访问的数据的集合HDF5文件作为一个单一的、统一的数据集,无需修改数据如何存储在原始文件。虚拟数据集可以有无限的维度和映射到源数据集与无限的维度。这个映射允许一个虚拟数据集增长随着时间的推移,作为其基础源数据集大小的变化。
VDS的特性是在HDF5库1.10版本中引入的。VDS公司使用,你必须熟悉HDF5 VDS公司的编程模型。有关更多信息,请参见HDF5虚拟数据集的文档HDF集团的网站。
请注意
MATLAB®版本早于R2021b不能读HDF5虚拟数据集。
创建一个虚拟数据集
遵循这些一般步骤为构建一个虚拟数据集:
创建数据集组成VDS公司(源数据集)(可选)。
创建VDS公司。
定义一个数据类型。
定义一个dataspace。
定义数据集创建属性列表。
从源数据元素映射到VDS的元素。
遍历源数据集。
源数据集选择元素(源选择)。
选择元素在虚拟数据集(目的地选择)。
目的地的选择映射到源选择使用一个数据集创建属性列表调用。
迭代结束。
调用
H5D.create
使用定义的属性。
VDS公司作为常规HDF5数据集的访问。
完成时关闭VDS公司。
请注意
HDF5 C库使用C风格的多维数组排序,而MATLAB使用FORTRAN-style排序。有关更多信息,请参见报告数据集的维度。
使用远程存储虚拟数据集
您可以使用MATLAB低级HDF5函数来创建和读取虚拟数据集存储在远程位置,如Amazon S3™和Windows Azure®团服务。使用高级HDF5函数来读取和访问信息在虚拟数据集存储在远程位置。
当访问一个虚拟数据集存储在远程位置,您必须指定完整路径使用统一资源定位符(URL)。例如,显示一个HDF5文件的元数据存储在Amazon S3。
h5disp (s3: / / bucketname path_to_file / my_VDSdata.h5 ');
更多信息建立MATLAB来访问您的在线存储服务,明白了使用远程数据。
从不同大小的数据集创建虚拟数据集
创建一个虚拟数据集的数据集HDF5不同大小和失配组和数据集的名称。高程数据从MATLAB生成的三个数据集山峰
函数。
使用三个数据集包含高程数据来重建一个更大的、更完整的地形图。三个数据集不相交,这意味着空间数据丢失以及一个或多个共享维度,不同的形状和大小。
重建出三种数据集的地形轮廓。采样点的三个数据集显示在地形概要文件根据他们的地理坐标。在这两个情节,x和y轴表示经度和纬度,分别与纬度增加在y方向上。
显示信息的三个数据集文件data_W.h5
,data_NE.h5
,data_SE.h5
。的h5disp
函数显示数据集的信息,包括它们的名称、数据类型,它们所属的维度,和组。
h5disp (“data_W.h5”)
HDF5 data_W。h5集团' / ' /数据的数据集“海拔”大小:20 x10最大尺寸:20 x10数据类型:H5T_IEEE_F64LE(双)ChunkSize:[]过滤器:没有FillValue: 0.000000
h5disp (“data_NE.h5”)
HDF5 data_NE。h5组' z ' ' / '数据集大小:11 x12最大尺寸:11 x12数据类型:H5T_IEEE_F64LE(双)ChunkSize:[]过滤器:没有FillValue: 0.000000
h5disp (“data_SE.h5”)
HDF5 data_SE。h5集团“/”数据集的海拔高度尺寸:9 * 13最大尺寸:9 * 13数据类型:H5T_IEEE_F64LE(双)ChunkSize:[]过滤器:没有FillValue: 0.000000
创建一个dataspace并创建虚拟数据集的属性列表。然后,每个数据集映射到虚拟dataspace使用c风格的尺寸订购和从零开始的索引。
例如,左下角的东北地区的数据块对应MATLAB指数(十11)
。将这些指标c风格的命令,从零开始的指数,指数(十11)
和减去价值1
。由此产生的开始索引9 [10]
。
%定义填充值和指定文件访问属性列表标识符。fillValue =南;faplID = H5P.create (“H5P_FILE_ACCESS”);%的虚拟数据集创建的文件。vdsFileID = H5F.create (“data_VDS.h5”,“H5F_ACC_TRUNC”,“H5P_DEFAULT”,faplID);%定义数据类型和dataspace。datatypeID = H5T.copy (“H5T_NATIVE_DOUBLE”);vdsDataspaceID = h5。create_simple (20 [24], []);%初始化虚拟数据集创建属性列表和虚拟布局和填补价值。vdsDcplID = H5P.create (“H5P_DATASET_CREATE”);H5P.set_layout (vdsDcplID“H5D_VIRTUAL”);H5P.set_fill_value (vdsDcplID datatypeID fillValue);%执行完整的数据集映射三个单独的源数据集。%从data_W地图/数据/高度的。h5虚拟数据集。srcDataspaceID_W = h5。create_simple (20 [10], []);H5S.select_hyperslab (vdsDataspaceID“H5S_SELECT_SET”[0 0]、[][],[10]20);H5P。set_virtual (vdsDcplID vdsDataspaceID,“data_W.h5”,/数据/高度的,srcDataspaceID_W);从data_NE % / z的地图。h5虚拟数据集。srcDataspaceID_NE = h5。create_simple (11 [12], []);H5S.select_hyperslab (vdsDataspaceID“H5S_SELECT_SET”9[10]、[][],[12]11日);H5P.set_virtual (vdsDcplID vdsDataspaceID,“data_NE.h5”,' / z ',srcDataspaceID_NE);从data_SE % /海拔高度的地图。h5虚拟数据集。srcDataspaceID_SE = h5。create_simple (2 9 [13], []);H5S.select_hyperslab (vdsDataspaceID“H5S_SELECT_SET”[11 0],[][],[9]13);H5P.set_virtual (vdsDcplID vdsDataspaceID,“data_SE.h5”,/海拔高度的,srcDataspaceID_SE);
创建HDF5文件和虚拟数据集/高程
,然后关闭所有打开的资源。
% H5D打电话。创建使用定义的属性。vdsDatasetID = H5D.create (vdsFileID,' /海拔'datatypeID vdsDataspaceID,“H5P_DEFAULT”vdsDcplID,“H5P_DEFAULT”);%关闭开放的资源。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);
读虚拟数据集和阴谋。
由此产生的情节类似于原始地形图的情节,除了地区数据丢失是由于数据集不相交的。
%使用底层接口读取海拔。vdsFileID = H5F.open (“data_VDS.h5”,“H5F_ACC_RDONLY”,“H5P_DEFAULT”);vdsDatasetID = H5D.open (vdsFileID,' /海拔',“H5P_DEFAULT”);海拔= H5D.read (vdsDatasetID,“H5ML_DEFAULT”,“H5S_ALL”,“H5S_ALL”,“H5P_DEFAULT”);H5D.close (vdsDatasetID);H5F.close (vdsFileID);contourf(高程、10);
显示虚拟数据集文件的内容。
h5disp (“data_VDS.h5”)
HDF5 data_VDS。h5集团“/”数据集“海拔”大小:20 x24最大尺寸:20 x24数据类型:H5T_IEEE_F64LE(双)ChunkSize:[]过滤器:没有FillValue:南
你可以在虚拟数据集执行I / O操作。例如,读hyperslab数据/高程
数据集使用h5read
高级接口函数。
示例= h5read (“data_VDS.h5”,' /海拔'[1],[5 - 6],[4]4日)
示例=5×60.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