我刚刚开始使用 HDF5,希望得到有关以下内容的一些建议。
我有一个二维数组:data[][]
传递到一个方法中。该方法如下所示:
void WriteData( int data[48][100], int sizes[48])
数据的大小实际上不是 48 x 100,而是 48 x size[i]。 IE。每行的长度可能不同!在我正在处理的一种简单情况下,所有行的大小相同(但不是 100),因此您可以说该数组是 48 X 大小 [0]。
如何最好地将其写入 HDF5?
我有一些工作代码,其中循环 0 到 48 并为每一行创建一个新的数据集。
就像是:
for (int i = 0; i < 48; i++)
{
hsize_t dsSize[2];
dsSize[0] = 48;
dsSize[1] = sizes[0]; // use sizes[i] in most general case
// Create the Data Space
DataSpace dataSpace = DataSpace(2, dsSize);
DataSet dataSet = group.createDataSet(dataSetName, intDataType, dataSpace);
dataSet.write(data[i], intDataType);
}
有没有一种方法可以将所有数据一次性写入一个 DataSet 中?也许一种解决方案适用于所有行长度相同的更简单情况,另一种解决方案适用于参差不齐的行?
我尝试了一些方法但没有成功。我调用了 dataSet.write(data, intDataType),即我将整个数组扔给它。我似乎在文件中得到了垃圾,我怀疑是因为存储数据的数组实际上是 48x100,而我只需要其中的一小部分。
我突然想到我也许可以使用 double ptr int** 或 vector> 但我坚持这一点。据我所知,“写入”需要一个 void* ptr。另外,我希望该文件“看起来正确”。 IE。包含所有数据行的一个巨大行是不可取的,如果我必须走这条路,有人需要传达一种灵活的方式来存储信息,该信息将允许我从文件中读回数据(可能将行长度存储为属性) ?)。
也许我真正的问题是找到重要用例的 C++ 示例。
任何帮助深表感谢。
Dave