【发布时间】:2020-06-15 22:34:11
【问题描述】:
我有多个不同大小的 std::vector 包含浮点数。我想将它们作为 HDF5 文件中的锯齿状数组全部写入/读取(理想情况下,使用 hyperslabs 一个接一个,因为我不能同时将所有向量保存在内存中)。我相信我应该使用一个常规数组,它的每个元素都是可变长度数据类型,但我发现的所有示例都是 C 示例。我的代码如下所示:
#include <vector>
#include "H5Cpp.h"
int main() {
std::vector<float> v1 {0.1, 0.2, 0.3};
std::vector<float> v2 {0.4, 0.5};
H5::VarLenType array_type (H5::PredType::NATIVE_FLOAT);
hsize_t dimensions[1] = {2};
H5::DataSpace dataspace (1, dimensions);
H5::H5File file ("jarray.h5", H5F_ACC_TRUNC);
H5::DataSet dataset = file.createDataSet("jarray", array_type, dataspace);
hsize_t size[1] = {1};
hsize_t offset[1] = {0};
dataspace.selectHyperslab(H5S_SELECT_SET, size, offset);
dataset.write(v1.data(), array_type);
return 0;
};
如果我忽略对write 函数的调用,代码将创建一个具有以下结构的空文件(由h5dump 打印):
HDF5 "jarray.h5" {
GROUP "/" {
DATASET "jarray" {
DATATYPE H5T_VLEN { H5T_IEEE_F32LE}
DATASPACE SIMPLE { ( 2 ) / ( 2 ) }
DATA {
(0): (), ()
}
}
}
}
这让我相信数据集具有正确的结构,但我的写作部分没有正确。
有人可以澄清如何写入这样的数组吗?之后如何读取这些值?任何帮助将不胜感激。
【问题讨论】: