【问题标题】:Reading from an HDF5 file: 3D data into 1D vector in memory从 HDF5 文件中读取:3D 数据到内存中的 1D 矢量
【发布时间】:2016-07-01 06:12:16
【问题描述】:

是否可以使用特定的内存空间布局将 HDF5 文件中的 3D 数组读入 C++ 中的 1D 数组/向量?

我试过了:

H5File file(file_name, H5F_ACC_RDONLY);
DataSet dataset = file.openDataSet(dataset_name);
DataSpace dataspace = dataset.getSpace();
hsize_t dim[3];
dataspace.getSimpleExtentDims(dim, NULL);

hsize_t memdim[1];
memdim[0] = dim[0] * dim[1] * dim[2];
DataSpace memspace(1, memdim);

vector<float> data_out(memdim[0]);
// set the memory layout to 1D
dataset.read(data_out.data(), PredType::NATIVE_FLOAT, memspace, dataspace);

但是向量没有正确填充。我认为可能有一个默认映射。也许没有?如何指定一个?

【问题讨论】:

  • 为什么说“向量没有正确填充”?也许这就是你索引它的方式是错误的?

标签: c++ hdf5


【解决方案1】:

事实证明,问题在于即使您读入 1D 数组,您仍然会将 3D 数据空间传递给 datasetread 方法。

H5File file(file_name, H5F_ACC_RDONLY);
DataSet dataset = file.openDataSet(dataset_name);
DataSpace dataspace = dataset.getSpace();
hsize_t dim[3];
dataspace.getSimpleExtentDims(dim, NULL);

hsize_t memdim = dim[0] * dim[1] * dim[2];;

vector<float> data_out(memdim);
//use the same layout for file and memory
dataset.read(data_out.data(), PredType::NATIVE_FLOAT, dataspace, dataspace);

【讨论】:

    猜你喜欢
    • 2020-06-23
    • 2022-01-22
    • 1970-01-01
    • 2021-12-09
    • 2021-03-23
    • 2013-05-17
    • 2019-01-06
    • 2014-01-22
    • 2020-05-28
    相关资源
    最近更新 更多