【发布时间】:2017-10-02 16:10:05
【问题描述】:
我正在使用 MATLAB 的函数 h5write 将双变量 foo 写入名为 saved_foos.h5 的 hdf5 文件。我有一个循环,它在每次迭代中更改 foo,我每次都将它保存在同一个 hdf5 文件中,但保存在另一个数据集中,该数据集中根据当前的迭代次数命名。
之后,我在带有H5Cpp库的C++程序中读取了每个数据集(每次迭代)的数据,如下所示:
#include "H5Cpp.h"
using namespace H5;
double readDouble(std::string dir, std::string file, std::string s_dataset) {
if (!fexists((dir + file + std::string(".h5")).c_str())) {
throw std::runtime_error((std::string("File ") + dir + file + std::string(".h5 does not exist.")).c_str());
}
H5File file_h(dir + file + std::string(".h5"), H5F_ACC_RDONLY);
DataSet dataset = file_h.openDataSet(s_dataset);
DataSpace dataspace = dataset.getSpace();
int rank = dataspace.getSimpleExtentNdims();
hsize_t *dims_out = new hsize_t[rank];
dataspace.getSimpleExtentDims(dims_out, NULL);
if (rank>=2 && (dims_out[0] * dims_out[1] != 1)) {
throw std::runtime_error("Requested dataset is not a scalar double value.");
}
double data;
dataset.read(&data, PredType::NATIVE_DOUBLE);
delete dims_out;
return data;
}
但是如何确定给定的 hdf5 文件中存储了多少数据集?
【问题讨论】: