我有一个 HDF5 数据集,它是使用 H5::ArrayType
为 double[3]
编写的。 DataSpace
是一维的 (rank=1
),具有 ndat
条目(每个类型都是 double[3]
).
现在我只想将每个 double[3]
的第二个读取到 double
的一维缓冲区中。我该怎么做?
相反,如果 DataSpace
是维度为 {ndat,3}
的二维,我可以简单地使用 hyper slab 选择方法在第二个中挑选出中间元素方面。我也可以在这里做吗?怎么办?
我对 C 或 C++ 的答案很满意。
最佳答案
好的,所以我对此进行了试验,发现这是不可能的,我认为这是HDF5 的限制。本质上,HDF5 将数据类型视为基本类型,不会将它们分解。因此,对于 HDF5 std::array<double,3>
用 H5::ArrayType
写的和 double[3]
用 H5::PredType::NATIVE_DOUBLE
写的根本不同:前者不能读入后者,反之亦然。
因此唯一的解决方案是避免使用 H5::ArrayType 并改用多维数据空间。
关于c++ - 如何读取存储在 HDF5 中的 ArrayType 的一个组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31898010/