2013-03-12 82 views
2

我需要将分层数据结构存储到hdf5中,其中大部分叶节点都是非数组类型(字符串或标量),onyl其中一些是同类数组。这些数据与此类似:将分层数据存储到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中。

回答

1

HDF5代表分层数据格式,它显然是存储像您的层次结构的正确工具。

我建议你保存你的叶子为数据集:

  • 使用标量数据集的标量(字符串,数字,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中导入应该是小菜一碟。