Хранение иерархических данных в hdf5-как их структурировать



Мне нужно хранить иерархическую структуру данных в 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.

471   1  

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 должен быть проще простого.

Comments

    Ничего не найдено.