我有一个HDF5数据集存档,使用H5::ArrayType
为double[3]
编写。 DataSpace
是一维(rank=1
),其中包含ndat
个条目(每个类型double[3]
)。
现在我想只读取每个double[3]
中的第二个到double
s的1D缓冲区。我怎么能这样做?
如果相反,DataSpace
是尺寸为{ndat,3}
的2D,我可以简单地使用超平板选择方法来挑选第二维中的中间元素。我也能在这做吗?怎么样?
我对C或C ++中的答案感到满意。
答案 0 :(得分:0)
好的,所以我对此进行了实验,发现这是不可能,我认为这是HDF5的限制。从本质上讲,HDF5将数据类型视为基本类型,并不会将其分解。因此,对于使用std::array<double,3>
编写的HDF5 H5::ArrayType
和使用double[3]
编写的H5::PredType::NATIVE_DOUBLE
根本不同:前者无法读入后者,反之亦然。
所以唯一的解决方案是避免使用H5 :: ArrayType 并使用多维数据空间。