我需要将分层数据结构存储到hdf5中,其中大多数叶子节点是非数组类型(字符串或标量),onyl中的一些是同构数组。这些数据与此类似:
/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中。
答案 0 :(得分: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中的导入应该是小菜一碟。