मैं 2 डी सरणी डेटासेट फ़ाइलों को लिखने के लिए HDF5 C++ API का उपयोग कर रहा हूं। एचडीएफ समूह में an example to create एक एचडीएफ 5 फ़ाइल है जो एक स्थिर रूप से परिभाषित सरणी आकार से है, जिसे मैंने नीचे अपनी आवश्यकताओं को सुइट करने के लिए संशोधित किया है। हालांकि, मुझे एक गतिशील सरणी की आवश्यकता है, जहां NX
और NY
रनटाइम पर निर्धारित किए गए हैं। मुझे गतिशील सरणी बनाने में मदद के लिए another solution to create 2D arrays using the "new" keyword मिला है।एचडीएफ 5 सी ++ इंटरफ़ेस: गतिशील 2 डी सरणी लिखना
#include "StdAfx.h"
#include "H5Cpp.h"
using namespace H5;
const H5std_string FILE_NAME("C:\\SDS.h5");
const H5std_string DATASET_NAME("FloatArray");
const int NX = 5; // dataset dimensions
const int NY = 6;
int main (void)
{
// Create a 2D array using "new" method
double **data = new double*[NX];
for (int j = 0; j < NX; j++) // 0 1 2 3 4 5
{ // 1 2 3 4 5 6
data[j] = new double[NY]; // 2 3 4 5 6 7
for (int i = 0; i < NY; i++) // 3 4 5 6 7 8
data[j][i] = (float)(i + j); // 4 5 6 7 8 9
}
// Create HDF5 file and dataset
H5File file(FILE_NAME, H5F_ACC_TRUNC);
hsize_t dimsf[2] = {NX, NY};
DataSpace dataspace(2, dimsf);
DataSet dataset = file.createDataSet(DATASET_NAME, PredType::NATIVE_DOUBLE,
dataspace);
// Attempt to write data to HDF5 file
dataset.write(data, PredType::NATIVE_DOUBLE);
// Clean up
for(int j = 0; j < NX; j++)
delete [] data[j];
delete [] data;
return 0;
}
परिणामी फ़ाइल, तथापि, के रूप में उम्मीद नहीं कर रहा है (hdf5dump
से उत्पादन):
HDF5 "SDS.h5" {
GROUP "/" {
DATASET "FloatArray" {
DATATYPE H5T_IEEE_F64LE
DATASPACE SIMPLE { (5, 6)/(5, 6) }
DATA {
(0,0): 4.76465e-307, 4.76541e-307, -7.84591e+298, -2.53017e-098, 0,
(0,5): 3.8981e-308,
(1,0): 4.76454e-307, 0, 2.122e-314, -7.84591e+298, 0, 1,
(2,0): 2, 3, 4, 5, -2.53017e-098, -2.65698e+303,
(3,0): 0, 3.89814e-308, 4.76492e-307, 0, 2.122e-314, -7.84591e+298,
(4,0): 1, 2, 3, 4, 5, 6
}
}
}
}
समस्या कैसे 2 डी सरणी बनाया गया था करने के लिए वापस उपजी (इस के बाद से यहाँ मैं क्या है उदाहरण एक स्थिर सरणी विधि के साथ ठीक काम करता है)। मैं this email thread से समझने के रूप में:
HDF5 पुस्तकालय तत्वों का एक सन्निहित सरणी होने की उम्मीद है, कम आयामों में तत्वों की ओर इशारा नहीं
के रूप में मैं नहीं बल्कि नई सी ++/HDF5 को हूँ, मैं कर रहा हूँ सुनिश्चित नहीं है कि रनटाइम पर गतिशील रूप से आकार का सरणी कैसे बनाएं, जो तत्वों की एक संगत सरणी है। मैं ईमेल थ्रेड में वर्णित अधिक जटिल "हाइपरस्लैब" विधि नहीं करना चाहता, क्योंकि यह अत्यधिक जटिल दिखता है। किसी भी मदद की सराहना की है।
यह समाधान लागू करने के लिए सरल है और वास्तव में अच्छी तरह से अनुरूप (मैं कर रहा हूँ 21.9 एम तत्वों के साथ सरणी आकार का उपयोग)। नतीजा एचडीएफ 5 फाइल आउटपुट में पूरी तरह से सत्यापित करता है। –
एक आकर्षण की तरह काम करता है। धन्यवाद। – CuriousCase
मुझे पता है कि यह काफी पुराना है, लेकिन, मुझे लगता है कि अंतिम वाक्य में कोई त्रुटि है। यह होना चाहिए: (डेटा के बजाय [i] [j] ') –