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の略で、あなたのような階層を保存するための適切なツールであることは明らかです。

葉をデータセットとして保存することをお勧めします。

  • スカラーにはスカラー データセットを使用します (文字列、数値は、サイズが 2 の配列flowRates型のスカラーと見なすこともできます)

  • 時系列に単純なデータセットを使用する

次のように、他のすべてのノードのグループを作成します。

/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 に答える