gpt4 book ai didi

c++ - 使用 Visual C++ 将二维数组 int[n][m] 写入 HDF5 文件

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:43:48 29 4
gpt4 key购买 nike

我刚刚开始使用 HDF5,希望能在以下方面提供一些建议。

我有一个二维数组:data[][] 传递给一个方法。该方法如下所示:

void WriteData( int data[48][100], int sizes[48])

数据的大小实际上不是 48 x 100,而是 48 x sizes[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 ptrs int** 或 vector> 但我坚持使用它。据我所知,“写”需要一个 void* ptr。另外,我希望文件“看起来正确”。 IE。一个包含所有数据行的巨大行是不可取的,如果我必须走那条路,有人需要传达一种巧妙的方式来存储信息,使我能够从文件中读回数据(可能将行长度存储为属性?)。

也许我真正的问题是找到重要用例的 C++ 示例。

非常感谢任何帮助。

戴夫

最佳答案

这是使用 variable length arrays 实现的方法如果您的数据是 vector 的 vector (这似乎对您的用例有意义):

void WriteData(const std::vector< std::vector<int> >& data)
{
hsize_t dim(data.size());
H5::DataSpace dspace(1, &dim);
H5::VarLenType dtype(H5::PredType::NATIVE_INT);
H5::DataSet dset(group.createDataSet(dataSetName, dtype, dspace));
hvl_t vl[dim];
for (hsize_t i = 0; i < dim; ++i)
{
vl[i].len = data[i].size();
vl[i].p = &data[i][0];
}
dset.write(vl, dtype);
}

关于c++ - 使用 Visual C++ 将二维数组 int[n][m] 写入 HDF5 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24561451/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com