HDF5 (.h5,.hdf5)

予備知識

    • MIMEタイプ:application/x-hdf5
    • HDFデータ形式バージョン5.
    • 多次元データ・画像を表す汎用形式.
    • 複合データ構造を含むデータ集合もサポートされている.
    • 科学データの保管,管理,交換に使われる.
    • HDFはHierarchical Data Formatの頭字語である.
    • U.S. National Center for Supercomputing Applications (NCSA)によって開発された.
    • 現在はThe HDF Groupによって保守されている.
    • バイナリファイル形式.
    • バージョン4以前のHDFとは非互換である.

ImportとExport

  • Import["file.h5"]はHDF5ファイルをインポートし,ファイルに保管されているデータ集合の名前を返す.
  • Import["file.h5",elem]はHDF5ファイルから指定の要素をインポートする.
  • インポート形式はImport["file","HDF5"]またはImport["file",{"HDF5",elem,}]で指定できる.
  • Export["file.h5",expr]は数値配列をHDF5にエキスポートする.
  • Export["file.h5",{expr1,},{"Datasets", {"dataset1",}}]はHDF5ファイルを作成し,データ配列{expr1,}を別々のデータ集合として保存する.
  • Export["file.h5",expr,elem]は指定の要素をHDF5ファイルにエキスポートする.
  • Export["file.h5",elem1->expr1,,"Rules"]はエキスポートする要素の指定するのに規則を使用する.
  • 一般的な情報は,以下の関数ページを参照のこと.
  • Import, Exportファイルからインポートする,あるいはファイルへエキスポートする
    CloudImport, CloudExportクラウドオブジェクトからインポートする,あるいはクラウドオブジェクトへエキスポートする
    ImportString, ExportString文字列からインポートする,あるいは文字列へエキスポートする
    ImportByteArray, ExportByteArrayバイト配列からインポートする,あるいはバイト配列へエキスポートする

Import要素

  • 一般的なImport要素:
  • "Elements" ファイル中の有効な要素とオプションのリスト
    "Summary"ファイルの概要
    "Rules"使用可能なすべての要素の規則のリスト
  • 構造要素:
  • "Datasets"全データ集合の名前
    "Groups"全グループの名前
    "StructureGraph"データ集合の構造を表す有向グラフ
    {"StructureGraph, groupname}groupname の下の構造を示すグラフ
    "StructureGraphLegend"構造化されたグラフの凡例
    "Summary"特性の概要
  • グループとデータ集合の名前は,ルートグループ名「/」で始まる絶対パスで与えられる.
  • ImportはHDF5形式に対してデフォルトで"Datasets"要素を使用する.
  • データ表現要素:
  • "Data"連想としてインポートされるすべてのデータ集合
    {"Data",n} or nn 番目のデータ集合
    {"Data",dataset} or dataset名前付きデータ集合
    {"Data",groupname}groupname 下のすべてのデータ集合の連想
    {"Data",groupname,lev}groupname 下のレベル lev までのデータ集合の連想
  • サポートされている基本的なデータ型:
  • "Integer8"8ビット整数
    "Integer16"16ビット整数
    "Integer32"32ビット整数
    "Integer64"64ビット整数
    "UnsignedInteger8"8ビット符号なし整数
    "UnsignedInteger16"16ビット符号なし整数
    "UnsignedInteger32"32ビット符号なし整数
    "UnsignedInteger64"64ビット符号なし整数
    "Real32"IEEE単精度数
    "Real64"IEEE倍精度数
    "String"ASCII文字の文字列
  • サポートされている構造化データ型:
  • "ByteArray"任意長のByteArray
    "Array"サポートされている任意のデータ形式の配列
    "Enum"列挙
    "Compound"他の任意のデータ形式と他の複合データ集合から成る複合データ集合
  • 複素数は通常複合型として保存,インポートされる.
  • メタデータ要素:
  • "Attributes"全グループとデータ集合の属性
    "DataEncoding"各データ集合の圧縮方法を指定する
    "DataFormat"各データ集合を表すのに使用する型
    "Dimensions"各データ集合のデータ次元
    {"metadata",n}n 番目のデータ集合のメタデータ
    {"metadata",dataset}名前付きデータ集合のメタデータ
  • サポートされているデータ符号化形式:
  • Noneデータ圧縮は行わない
    "Fletcher32"フレッチャーのチェックサムを加える
    "GZIP"GZIP圧縮
    "ScaleOffset"スケールおよび/またはオフセット操作を行う
    "Shuffle"一貫したバイト位置が一緒に置かれるように順序を入れ替える
    "SZIP"SZIP圧縮(Importのみ)
  • 単一のデータ集合に複数の符号化形式を含ませることができる.これはリスト{enc1,enc2,}で指定する.

Export要素

  • 一般的なExport要素:
  • "Rules"elemexpr という形で表されたインポートされた要素のリスト
  • Export["file.h5",{elem1->expr1,},"Rules"]は規則を使ってエキスポートする要素を指定する.
  • 利用できるExport要素:
  • "Attributes"任意のオブジェクトに関連付けられた属性
    "Datasets"データ集合と,それに関連付けられた要素
    "Groups"グループ名とそれらに関連付けられた要素
    "NamedDataTypes"名前付きのデータ型とそれらに関連付けられた要素
  • "Attributes"要素で以下の式が与えられる:
  • attrルートグループ「/」に関連付けられた属性
    {path1attr1,}特定の pathiに関連付けられた属性 attri
  • 属性 attri"attname"->attval という形で与えなければならない.
  • "Groups"要素のときは以下の式を与えることができる:
  • {"gr1","gr2",}グループパスのリスト
    {"gr1"grdata1,}グループとそれらに関連付けられたデータのリスト
  • グループデータ grdatai は以下のキーが取れる:
  • "Attributes"グループの属性
    "HardLinks"他のオブジェクトへのハードリンク
    "SoftLinks"他のオブジェクトへのソフトリンク
  • ソフトリンクとハードリンクは "linkname"path で指定できる.
  • "Datasets"要素のときは以下の式を与えることができる:
  • data"Dataset1"data を保存する
    {"name1"data1,}データ集合名とそれに関連付けられたデータのリスト
    {"name1"ds1,}規則のリストを使って各データ集合 dsi を指定する
  • データ集合 dsi は以下のキーが取れる:
  • "Attributes"データ集合の属性
    "Data"データの配列
    "DataFormat"データ形式
    "MaxDimensions"データ集合の最大次元のリスト
    "SpaceSelection"データが書き込まれるデータ空間の部分
  • "NamedDataTypes"要素のときは以下の式を与えることができる:
  • {"name1"type1,}データ型
    {"name1"<|"Type"type1,"Attributes"att1|>,}型とその属性を指定する連想
  • タイプ指定 typei は次の形が取れる:
  • "simpletype""Integer64"等の簡単なデータ型
    <|"Class""ByteArray",|>"Length"キーと"Tag"キーを取る
    <|"Class""Array",|>"DataFormat"キーと"Dimensions"キーを取る
    <|"Class""Compound",|>"Structure"キーを取る

オプション

  • ImportExportのオプション:
  • "ComplexKeys"Automatic複素数の解釈とエキスポートのためのキー
  • デフォルトでは,複素数のキーには{"Re","Im"}が使用される.この他に以下の設定が可能である:
  • None複素数解釈なし(インポートのみ)
    Automatic自動キーを使用する
    {key1,key2}明示的なキーを使用する
  • Importオプション:
  • "TakeElements"Allインポートする要素のサブセット
  • "TakeElements"が取ることのできる値:
  • {elem1,elem2,}要素 elemiのリスト
    {m;;n;;s,...}要素 m から n までステップ s
    {opt1val1,}サブオプションのリスト
  • 要素を取るのに使用できるサブオプション opti
  • "Offset"{0,0,}データ集合の次元のオフセット
    "Count"All各次元でインポートするブロック数
    "Stride"{1,1,}ブロックの始まりの間隔
    "Block"{1,1,}各ブロックの要素数
  • Exportオプション:
  • ByteOrdering$ByteOrdering使用するバイト順
    OverwriteTargetTrue既存のファイルを上書きするかどうか
    "AppendMode""Extend"既存のオブジェクトにどのように追加するか
  • OverwriteTarget->"Append"を使うと,既存のファイルに新しいオブジェクトを加えることができる.
  • "AppendMode"の可能な設定:
  • "Extend"可能なら既存のオブジェクトを拡張する(デフォルト)
    "Overwrite"既存のオブジェクトを上書きする
    "Preserve"既存のオブジェクトを維持する

例題

すべて開くすべて閉じる

  (1)

サンプルファイルに保管されているデータを示す:

ファイルの概要を取得する:

ファイルの構造を示す:

スコープ  (12)

Import  (7)

ファイル内の利用できる全ての要素を示す:

デフォルトでは,データ集合名のリストが返される:

ファイル形式を明示的に指定して,ファイル構造をインポートする:

データ集合の名前を指定してその内容をインポートする:

ファイル内のすべてのデータ集合の次元とデータ型をインポートする:

単一のデータ集合の次元とデータ形式をインポートする:

8ビットRGBラスタをインポートし,Imageオブジェクトとして描画する:

Export  (5)

行列をHDF5にエキスポートする:

このファイルに含まれるデータ集合を示す:

名前付きデータ集合をエキスポートする:

2つの行列をHDF5にエキスポートする:

名前付きデータ集合を指定のデータ型でエキスポートする:

データ型をインポートする:

名前付きデータ型とそれがリンクするグループをエキスポートする:

ファイル構造をインポートする:

Import要素  (22)

Attributes  (4)

ファイル内のすべてのオブジェクトの属性をインポートする:

指定のデータ集合の属性をインポートする:

ファイルの2つ目のデータ集合の属性をインポートする:

ファイル内のデータ集合の順序は以下を呼び出すことで確認できる:

複数のオブジェクトの属性をインポートする:

Data  (4)

ファイル内のすべてのデータ集合のデータを取得する:

グループ"Complex"グループ内のデータ集合"Complex64"からデータをインポートする:

ファイル内の3つ目のデータ集合のデータをインポートする:

指定のグループのすべてのデータ集合からデータを取得する:

リスト内のすべてのデータ集合またはグループからデータをインポートする:

DataEncoding  (1)

ファイル内の各データ集合に適用されたフィルタを確認する:

DataFormat  (2)

ファイル内のすべてのデータ集合のデータ型についての記述を取得する:

簡単な数値型と文字列型は1単語で記述されている:

複合型の"DataFormat"はクラスと構造を示す:

列挙型の"DataFormat"にはクラス,ベースデータ形式,値と名前のリストが含まれる:

配列型の"DataFormat"にはクラス,ベースデータ形式,次元が含まれる:

バイト配列型の"DataFormat"にはクラスと長さが含まれる:

Datasets  (2)

ファイル中のすべてのデータ集合の名前をインポートする:

"Datasets"はHDF5要素のデフォルトである:

Dimensions  (4)

ファイル内のすべてのデータ集合の次元を取得する:

指定のグループ下のすべてのデータ集合の次元をインポートする:

要素を一つしか含まないデータの次元は空のリストで示される:

特定のデータ集合の次元を取得する:

データ集合を指標を使ってデータ集合を指定する:

Groups  (1)

各グループは一度だけリストして,ファイル内のすべてのグループの名前をインポートする:

StructureGraph  (3)

構造化されたHDF5ファイルの構造:

平坦なHDF5ファイルの構造:

範例を取得する:

Summary  (1)

ファイルの概要を取得する:

Export要素  (28)

Attributes  (4)

ルートグループに属性を2つ加える:

属性のデータ型を指定する:

データ集合の"Datasets"と"Attributes"の両方の要素の属性をエキスポートする:

各属性は同じオブジェクトのどの属性とも異なる独自の名前でなければならない:

既存の名前で別の属性をエキスポートしてみる:

"ApendMode"を"Overwrite"に設定して,既存の属性を上書きすることができる:

Datasets  (13)

"Datasets"はデフォルトのエキスポート要素である.データ形式と次元は式から自動的に推測される:

式を,各々が完全パスを持つことのできる別のデータ集合にエキスポートする:

HDF5ファイルの構造を調べる:

データ集合をカスタムのデータ型でエキスポートする:

属性を含むデータ集合をエキスポートする:

単一の整数を持つスカラー型のデータ集合を作成する:

整数の配列を作成する:

実数の配列をエキスポートする:

複素数を持つ数値配列をエキスポートする:

複素数は複合型のデータ集合にエキスポートされる:

"ComplexKeys"オプションを使って複素数を戻す:

文字列を含むデータ集合を作成する:

ByteArray"ByteArray"型として保存される(HDF5では不透明型とも呼ばれる):

文字列のキーを持つ連想は複合型要素としてエキスポートされる:

初期サイズが2 x 2で,後で行数を10まで,列数を任意数まで拡張できるデータ集合を作成する:

最初の行を整数5つのリストで上書きする.これによりデータ集合が5列に拡張される:

"SpaceSelecion"サブ要素を使って3,4列目を上書きする:

任意に拡張できる3 x 4のデータ集合を作成する:

3 x 3の配列を加える.これは最初の次元に従ってのみ可能で,Exportは自動的にそれを検出する:

データ次元はデータ集合の自動拡張ができないこともある:

その場合,"SpaceSelection"を手動で指定する:

Groups  (9)

HDF5ファイルは常にパス「/」の付いたルートグループを持つ:

パスのリストを与えて複数のグループをエキスポートする:

グループは他のグループまたはデータ集合へのリンクを持つことができる:

ソフトリンク名は特殊文字「/」を含むことができない:

ソフトリンクの参照先は.「 .」や「 ..」を含まない,有効なパスでなければならない:

ソフトリンクの参照先がない場合,リンクは未決定のリンクとなる:

2つのグループ,データ集合,および1つのグループからデータ集合へのハードリンクを持つファイルを作成する:

存在しない場所を指す新しいハードリンクを加えることはできない:

「/A/newDset」に新しいデータ集合を作成する:

「newDset」リンクがグループ「B」を指すようにリダイレクトを試みる:

これは"Overwrite"モードでのみ可能である:

2つ目のデータ集合へのアクセスが不可逆的に失われた.ファイル内の領域はまだデータ集合によって使用されているので,これはリソースリークである.

ソフトリンクの場合と同様に,ハードリンクの名前も厳密に1つのパス要素で構成されなければならない:

ハードリンクの参照先は.「.」や「..」を含まない,有効なパスでなければならない:

NamedDatatypes  (2)

単純な型をファイルにエキスポートする:

そのファイルに複合型の名前付きデータ型を加える:

データ集合をエキスポートするとき,前にエキスポートした型を使用する:

データ集合のデータ型と次元をインポートする:

エキスポートされたデータを調べる:

名前付きデータ集合は属性を持つことができる:

Importオプション  (4)

"ComplexKeys"  (1)

HDF5には複素数用の組込みの型がない.通常そのような数は複合型に保存される:

複素数の実部と虚部として解釈するキーを指定する:

"TakeElements"  (3)

データ集合から3点をインポートする:

これも同じであるが,データ集合をすべてインポートした後に部分を抽出するより効率的である:

要素の範囲指定を使ってデータ集合からある範囲のデータをインポートする:

オフセット,ストライド,ブロックを指定するサブオプションを使用する:

Exportオプション  (8)

"AppendMode"  (1)

OverwriteTarget"Append"を使って既存のファイルにデータを加える際,データ追加のためのエキスポート動作は"AppendMode"オプションで指定できる.デフォルトでは"AppendMode""Extend" が使われる.

簡単なフィアルを作成する:

新しい群を加える:

新しいデータ集合を加える:

"gr1/ds1"に属性を加え, "gr1"から"gr2"へのハードリンクも加える:

"AppendMode""Extend"では既存の属性やリンクの値を変更することはできない:

"AppendMode""Overwrite"とすると,既存のオブジェクトを上書きしたり,ファイルに新しいオブジェクトを追加したりすることができる:

"AppendMode""Overwrite"とすると,既存のデータ集合において,データ型と次元が合致する限り,データを変更することができる:

ファイル内の既存の構造に変更を加えることなくファイルに新しいオブジェクトを追加するためには"AppendMode""Preserve"を使用する:

ByteOrdering  (1)

HDF5ではバイト順を選ぶことができる.ビッグエンディアンのファイルを作成するためにはByteOrdering-1を使う:

リトル英ディアンのファイルを作成する:

2つのファイルは実際異なる:

Importバイト順に関係なく,正しく動作する:

"ComplexKeys"  (3)

デフォルトでは,複素数は"Re"キーと"Im"キーを使って複合型にエキスポートされる:

別のキーを指定する:

データを複素数としてインポートするためには,Importでキーを指定する:

キーは異なるものでなければならない:

OverwriteTarget  (3)

デフォルトでは,OverwriteTargetTrueとすると,Exportが呼び出されるたびに新しいファイルに書き込まれる:

出力ファイルがすでに存在するときに OverwriteTargetFalseとすると,Exportの呼出しは失敗する:

HDF5等,特定の形式へのExportは設定OverwriteTarget"Append"をサポートする.これは出力ファイルを上書きするのではなく,出力ファイルが存在しているようにExportが振る舞う設定である:

特性と関係  (1)

デフォルトでは,連想は複合型のデータ集合としてエキスポートされる:

規則のリストは複数のデータ集合としてエキスポートされる:

考えられる問題  (1)

"Groups"はファイル内の各グループを一度だけリストする:

"/group2"はファイル内のリストされていない有効なパスである:

リストされていないグループパスを使用する: