从 HDF5 文件中读取:3D 数据到内存中的 1D 向量
Reading from an HDF5 file: 3D data into 1D vector in memory
是否可以使用特定的内存空间布局将 HDF5 文件中的 3D 数组读入 C++ 中的 1D array/vector?
我试过了:
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);
但是向量没有正确填充。我认为可能有默认映射。也许没有?如何指定一个?
事实证明,问题是即使您读入一维数组,您仍然将 3D 数据空间传递给 dataset
的 read
方法。
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);
是否可以使用特定的内存空间布局将 HDF5 文件中的 3D 数组读入 C++ 中的 1D array/vector?
我试过了:
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);
但是向量没有正确填充。我认为可能有默认映射。也许没有?如何指定一个?
事实证明,问题是即使您读入一维数组,您仍然将 3D 数据空间传递给 dataset
的 read
方法。
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);