2013-03-12 14 views
2

J'ai besoin de stocker la structure de données hiérarchique dans hdf5, où la majorité des nœuds feuilles sont des types non-array (chaînes ou scalaires), certains d'entre eux sont des tableaux homogènes. Ces données ressemblent à ceci:Stocker des données hiérarchiques dans hdf5 - comment les structurer

/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 
    ... 
    ... 

données sous chaque simulation sont structurés de la même manière, mais pas nécessairement identique, donc je pense que l'utilisation d'une table est impossible.

Dois-je créer des groupes pour toutes les feuilles et toujours définir la valeur en tant que tableau attaché à cette feuille et utiliser le tableau 1x1 si la valeur est scalaire? Dois-je utiliser les attributs de groupe pour toutes les données sauf les tableaux réels? Cela ne va-t-il pas dérouter les gens qui travaillent avec ces fichiers?

Je n'ai pratiquement aucune expérience avec hdf5; le nombre de données sera relativement petit, il n'y a pas beaucoup d'inquiétude quant à l'efficacité en ce moment - l'important est de pouvoir importer facilement des données dans Matlab.

Répondre

1

HDF5 signifie Format de données hiérarchique, il s'agit clairement du bon outil pour stocker une hiérarchie comme la vôtre.

Je recommande que vous stockez vos feuilles comme des jeux de données:

  • utilisation des ensembles de données scalaires pour scalaires (chaînes, des nombres, flowRates peut également être considéré comme un scalaire de type tableau de taille 2)

  • utilisent des ensembles de données simples pour les séries chronologiques

et créer des groupes pour tous les autres noeuds, comme celui-ci:

/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 

L'importation dans Matlab devrait être un morceau de gâteau.

Questions connexes