2015-11-10 130 views
0

正如标题所说,我想从C++中的hdf5文件中读取数据集。数据集是用h5py编写的。它包含一个复杂数字的数组。C++:从hdf5文件中读取一个numpy的复数数组

我可以正确检测阵列

using namespace H5; 
std::string file_name = "/path/to/my/file.hdf5"; 
std::string dataset_name = "dataset_name"; 
H5File file(file_name, H5F_ACC_RDONLY); 
DataSet dset = file.openDataSet(dataset_name); 
DataSpace dspace = dset.getSpace(); 
int size = dspace.getSimpleExtentNpoints(); 

我可以准备,比如总维度,vector

std::vector<std::complex<double>> out_vector(size); 

我怎样才能读取数据集?

dset.read(out_vector.data(), ???); 
+1

很好,你已经说明你的要求。实际上下一步是什么?开始设计一个实现或询问Stack Overflow? (提示:后者不太可能导致生产就绪结果)。也别忘了问一个问题,我找不到一个问题。 –

+0

我试图做到这一点,我认为我的草案解决方案对知道这个问题的人没有任何帮助。无论如何,我很高兴发布我的尝试。 – dPol

回答

0

HDF5 API没有复杂的DataType。 python API也没有。但是,h5py会自动创建一个包含这对双打的复合类型。 h5dump /path/to/my/file.hdf5示出它:

DATATYPE H5T_COMPOUND { 
    H5T_IEEE_F64LE "r"; 
    H5T_IEEE_F64LE "i" 
} 

在C++中,兼容的化合物的数据类型必须由手来创建。例如:

CompType complex_data_type(sizeof(out_vector[0])); 
complex_data_type.insertMember("r", 0, PredType::NATIVE_DOUBLE); 
complex_data_type.insertMember("i", sizeof(double), PredType::NATIVE_DOUBLE); 

DataSet现在可以读取

dset.read(out_vector.data(), complex_data_type);