将数据保存到 hdf5 文件中:是否需要为每个数据集创建一个新的数据空间?

Saving data into an hdf5 file: necessary to create a new dataspace for every dataset?

我有一个二维数组,我需要将其写入 hdf5 文件。我需要将二维数组分成一组一维数组,即每个一维数组具有相同的大小。出于某种原因,我在我的 C 代码中为每个一维数组创建了一个新的 dataspace。更准确地说,我目前的做法是

  1. 使用 H5Fcreate
  2. 打开(或创建)文件
  3. 创建群组 H5Gcreate2
  4. 使用 H5Screate_simple
  5. 创建数据空间
  6. 使用 H5Dcreate
  7. 创建数据集
  8. 使用 H5Dwrite
  9. 将一维数组写入数据集
  10. 关闭数据集标识符 H5Dclose
  11. 关闭数据空间标识符 H5Sclose
  12. 回到3.继续下一个一维数组

在查看了 H5Dcreate2documentation 之后,我意识到我可能不需要在每个一维数组之后关闭数据空间并在之后为下一个一维数组创建一个新的数据空间,因为这些一维数组的大小都相同。

我的问题:如果所有这些一维数组具有相同的大小(但内容不同),为什么我应该为每个一维数组创建一个 new/separate 数据空间?

您的结论是正确的:没有必要为您创建的每个一维数组都创建一个 new/separate 数据空间(换句话说,只需 re-use 需要多次相同的数据空间因为所有这些数组的大小和数据类型都相同)。

这就是使用 HDFql 时发生的情况。在 C:

中使用 HDFql 对上述算法进行编码如下所示
// declare variable
char script[100];

// create an HDF5 file named 'test.h5' and use it (i.e. open it)
hdfql_execute("create and use file test.h5");

// create an HDF5 group named 'my_group'
hdfql_execute("create group my_group");

// create 100 arrays
for(int i = 0; i < 100; i++)
{
    // prepare script to create a one dimensional (size 10) dataset of data type int
    sprintf(script, "create dataset my_group/my_dataset_%d as int(10)", i);

    // execute script
    hdfql_execute(script);
}

// close file
hdfql_execute("close file");

在上面的代码中,这是透明完成的(来自用户 point-of-view),但这是幕后发生的事情。