2015-11-10 114 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);