2

我需要将分层数据结构存储到 hdf5 中,其中大多数叶节点是非数组类型(字符串或标量),其中只有少数是同构数组。这些数据看起来类似于:

/simulation-20130312_13:33p1435
   +- input
   |  +- gravity = 9.81
   |  +- timeScale = 1.0
   |  +- userTitle = 'real'
   |  +- flowRates = [ 1.1, 2.1 ]
   |  +- material
   |     +- density = 1234.2
   |     +- young = 1.123e6
   |     +- temp = 290.2
   +- finished = '20130312_16:21'
   +- host = 'efflux.local'
   +- series
      +- t = [0,1e-5,2e-5,...,3.4e-4]
      +- Ek = [0,...]
/simulation-20130312_13:55p1657
   ...
   ...

每个模拟下的数据结构相似,但不一定相同,所以我认为使用表格是不可能的。

我是否应该为所有叶子创建组,并始终将值设置为附加到该叶子的数组,如果值为标量,则使用 1x1 数组?我应该对除真实数组之外的所有数据使用组属性吗?这不会让使用这些文件的人感到困惑吗?

我几乎没有使用 hdf5 的经验;数据的数量会比较少,此时对效率没有太多关注——重要的是能够轻松地将数据导入Matlab。

4

1 回答 1

1

HDF5 代表Hierarchical Data Format,它显然是存储像您这样的层次结构的正确工具。

我建议您将叶子存储为数据集:

  • 对标量使用标量数据集(字符串、数字,flowRates也可以认为是大小为 2 的数组类型的标量)

  • 对时间序列使用简单的数据集

并为所有其他节点创建组,如下所示:

/simulation-20130312_13:33p1435       # root group: /
   +- input                           # group: /input
   |  +- gravity = 9.81               # scalar double
   |  +- timeScale = 1.0              # scalar double
   |  +- userTitle = 'real'           # scalar string
   |  +- flowRates = [ 1.1, 2.1 ]     # scalar array[2]
   |  +- material                     # group: /input/material
   |     +- density = 1234.2          # scalar double
   |     +- young = 1.123e6           # scalar double
   |     +- temp = 290.2              # scalar double
   +- finished = '20130312_16:21'     # scalar string
   +- host = 'efflux.local'           # scalar string
   +- series                          # group: /series
      +- t = [0,1e-5,2e-5,...,3.4e-4] # simple dataset double
      +- Ek = [0,...]                 # simple dataset double

Matlab 中的导入应该是小菜一碟。

于 2013-03-13T13:39:11.693 回答