2016-04-22 14 views
0

HDF5ファイルの3D配列をC++の1D配列/ベクトルに特定のメモリ空間レイアウトを使用して読み込むことはできますか? HDF5ファイルからの読み込み:3Dデータをメモリ内の1Dベクトルに変換する

は、私が試した:

H5File file(file_name, H5F_ACC_RDONLY); 
DataSet dataset = file.openDataSet(dataset_name); 
DataSpace dataspace = dataset.getSpace(); 
hsize_t dim[3]; 
dataspace.getSimpleExtentDims(dim, NULL); 

hsize_t memdim[1]; 
memdim[0] = dim[0] * dim[1] * dim[2]; 
DataSpace memspace(1, memdim); 

vector<float> data_out(memdim[0]); 
// set the memory layout to 1D 
dataset.read(data_out.data(), PredType::NATIVE_FLOAT, memspace, dataspace); 

しかし、ベクトルが正しく入力されていません。私はデフォルトのマッピングがあるかもしれないと思った。多分そこにはないでしょうか?どのように指定すればよいですか?

+0

「ベクターが正しく充填されていない」という意味はどうしてですか?たぶんそれは間違っているインデックスを作成している方法ですか? – Holt

答えて

0

1D配列を読み込んだにもかかわらず、readメソッドの3Dデータスペースをdatasetに渡すことが問題であることが判明しました。

H5File file(file_name, H5F_ACC_RDONLY); 
DataSet dataset = file.openDataSet(dataset_name); 
DataSpace dataspace = dataset.getSpace(); 
hsize_t dim[3]; 
dataspace.getSimpleExtentDims(dim, NULL); 

hsize_t memdim = dim[0] * dim[1] * dim[2];; 

vector<float> data_out(memdim); 
//use the same layout for file and memory 
dataset.read(data_out.data(), PredType::NATIVE_FLOAT, dataspace, dataspace); 
関連する問題