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要素:
-
"Elements" ファイル中の有効な要素とオプションのリスト "Summary" ファイルの概要 "Rules" 使用可能なすべての要素の規則のリスト - 構造要素:
-
"Datasets" 全データ集合の名前 "Groups" 全グループの名前 "StructureGraph" データ集合の構造を表す有向グラフ {"StructureGraph, groupname} groupname の下の構造を示すグラフ "StructureGraphLegend" 構造化されたグラフの凡例 "Summary" 特性の概要 - グループとデータ集合の名前は,ルートグループ名「/」で始まる絶対パスで与えられる.
- ImportはHDF5形式に対してデフォルトで"Datasets"要素を使用する.
- データ表現要素:
-
"Data" 連想としてインポートされるすべてのデータ集合 {"Data",n} or n n 番目のデータ集合 {"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要素:
-
"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"キーを取る
オプション
- ImportとExportのオプション:
-
"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 使用するバイト順 OverwriteTarget True 既存のファイルを上書きするかどうか "AppendMode" "Extend" 既存のオブジェクトにどのように追加するか - OverwriteTarget->"Append"を使うと,既存のファイルに新しいオブジェクトを加えることができる.
- "AppendMode"の可能な設定:
-
"Extend" 可能なら既存のオブジェクトを拡張する(デフォルト) "Overwrite" 既存のオブジェクトを上書きする "Preserve" 既存のオブジェクトを維持する
例題
すべて開く すべて閉じる例 (1)
スコープ (12)
Import (7)
Import["ExampleData/structured.h5", "Elements"]Import["ExampleData/structured.h5"]ファイル形式を明示的に指定して,ファイル構造をインポートする:
Import["ExampleData/structured.h5", "StructureGraph"]Import["ExampleData/structured.h5", "group1/data1"]ファイル内のすべてのデータ集合の次元とデータ型をインポートする:
Import["ExampleData/structured.h5", {{"Dimensions", "DataFormat"}}]Import["ExampleData/structured.h5", {{"Dimensions", "DataFormat"}, "group1/data1"}]8ビットRGBラスタをインポートし,Imageオブジェクトとして描画する:
Image[Import["ExampleData/image.h5", {"Datasets", "/image24bitpixel"} ], "Byte"]Export (5)
Export[ "matrix.h5", {{1, 2}, {2, 3}}]Import["matrix.h5", "Data"]Export["m1.h5", {{1, 2}, {2, 3}}, {"Datasets", "m1"}]Import["m1.h5", "Data"]Export["test.h5", {{{1, 2}, {2, 3}}, {{10, 11}, {12, 13}}}, {"Datasets", {"m1", "m2"}}]Import["test.h5", "Data"]Export["m1.h5", "/m1" -> {
"Data" -> Range[5],
"DataFormat" -> "UnsignedInteger8"
}]Import["m1.h5", {{"DataFormat", "Data"}}]名前付きデータ型とそれがリンクするグループをエキスポートする:
Export["test.h5", {
"NamedDatatypes" -> {"MyType" -> "Integer16"},
"Groups" -> {"MyGroup" -> {"HardLinks" -> {"Type1" -> "/MyType"}}}
}, "Rules"]Import["test.h5", "StructureGraph"]Import要素 (22)
Attributes (4)
Import["ExampleData/sample2.h5", "Attributes"]Import["ExampleData/sample1.h5", {"Attributes", "/Integer/UInt32"}]Import["ExampleData/sample2.h5", {"Attributes", 2}]ファイル内のデータ集合の順序は以下を呼び出すことで確認できる:
Import["ExampleData/sample2.h5", "Datasets"]Import["ExampleData/sample1.h5", {"Attributes", {"/Integer/UInt32", "/", "/UTF8String", "/Real"}}]Data (4)
Import["ExampleData/structured.h5", "Data"]グループ"Complex"グループ内のデータ集合"Complex64"からデータをインポートする:
Import["ExampleData/sample1.h5", {"Data", "Complex/Complex64"}]Import["ExampleData/sample1.h5", {"Data", 3}]Import["ExampleData/sample1.h5", {"Data", "/Real"}]リスト内のすべてのデータ集合またはグループからデータをインポートする:
Import["ExampleData/sample1.h5", {"Data", {"Integer/UInt8", "/Complex"}}]DataEncoding (1)
DataFormat (2)
ファイル内のすべてのデータ集合のデータ型についての記述を取得する:
Import["ExampleData/sample1.h5", "DataFormat"]Import["ExampleData/sample1.h5", {"DataFormat", "/Integer/Int64"}]Import["ExampleData/sample2.h5", {"DataFormat", "/Compound"}]列挙型の"DataFormat"にはクラス,ベースデータ形式,値と名前のリストが含まれる:
Import["ExampleData/sample2.h5", {"DataFormat", "/Enumerated"}]配列型の"DataFormat"にはクラス,ベースデータ形式,次元が含まれる:
Import["ExampleData/sample2.h5", {"DataFormat", "/Array"}]バイト配列型の"DataFormat"にはクラスと長さが含まれる:
Import["ExampleData/sample2.h5", {"DataFormat", "/Opaque"}]Datasets (2)
Dimensions (4)
Import["ExampleData/sample1.h5", "Dimensions"]指定のグループ下のすべてのデータ集合の次元をインポートする:
Import["ExampleData/sample1.h5", {"Dimensions", "/Integer"}]Import["ExampleData/sample1.h5", {"Dimensions", "/Complex/Complex128"}]Import["ExampleData/sample1.h5", "/Complex/Complex128"]Import["ExampleData/sample1.h5", {"Dimensions", "/Integer/Int16"}]Import["ExampleData/sample1.h5", {"Dimensions", 3}]Groups (1)
StructureGraph (3)
Export要素 (28)
Attributes (4)
Export["attr.h5", "/" -> {"MyAttribute" -> "Hello World!", "NumberOfAttributes" -> 2}, "Attributes"];
Import["attr.h5", "Attributes"]Export["attr.h5", "/" ->
"Metadata" -> {
"Data" -> Range[20],
"DataFormat" -> "UnsignedInteger8"
}, "Attributes"];
Import["attr.h5", "Attributes"]データ集合の"Datasets"と"Attributes"の両方の要素の属性をエキスポートする:
Export["dsets.h5", {"Datasets" ->
"Dataset1" -> {
"Data" -> Range[20],
"DataFormat" -> "UnsignedInteger8",
"Attributes" -> {"Units" -> "Meters"}
},
"Attributes" ->
"/Dataset1" -> {
"CreationTime" -> UnixTime[],
"TimeUnits" -> "Seconds"
}
}, "Rules"];
Import[%, {{"Data", "Attributes"}}]各属性は同じオブジェクトのどの属性とも異なる独自の名前でなければならない:
Export["attr.h5", {
"Groups" -> "MyGroup" -> {
"Attributes" -> "MyAttribute" -> "HelloWorld",
"SoftLinks" -> "MyData" -> "/Dataset1"
},
"Datasets" ->
"/Dataset1" -> {
"Data" -> {1, 2, 3, 4, 5},
"Attributes" ->
"Units" -> "Meters"
},
"Attributes" -> {
"/" -> "a1" -> 5,
"/Dataset1" -> "a1" -> 4
}}, "Rules"];
Import[%, "Attributes"]Export["attr.h5", {
"/Dataset1" -> "a1" -> <|"X" -> 4, "Y" -> ByteArray[{1, 2, 3, 4}]|>
}, "Attributes", OverwriteTarget -> "Append"];
Import[%, "Attributes"]"ApendMode"を"Overwrite"に設定して,既存の属性を上書きすることができる:
Export["attr.h5", {
"/Dataset1" -> "a1" -> <|"X" -> 4, "Y" -> ByteArray[{1, 2, 3, 4}]|>
}, "Attributes", OverwriteTarget -> "Append", "AppendMode" -> "Overwrite"];
Import[%, "Attributes"]Datasets (13)
"Datasets"はデフォルトのエキスポート要素である.データ形式と次元は式から自動的に推測される:
Export["file.h5", {"Message" -> "Hello", "Numbers" -> {1, 2, 3}}, "Datasets"]Import["file.h5", "Data"]Import["file.h5", "DataFormat"]式を,各々が完全パスを持つことのできる別のデータ集合にエキスポートする:
Export["file.h5", {
"path/group/Dataset1" -> {"Hello", "Goodbye"},
"path/Dataset2" -> Range[20]
}];Import["file.h5", "Data"]Import["file.h5", "StructureGraph"]Export["file.h5",
"Dataset1" -> {
"Data" -> Range[20],
"DataFormat" -> "UnsignedInteger8"
}
];
Import["file.h5", {{"Data", "DataFormat"}}]Export["dsets.h5", {
"Dataset1" -> {
"Data" -> Range[20],
"DataFormat" -> "UnsignedInteger8",
"Attributes" -> {"Units" -> "Meters"}
}
}];
Import["dsets.h5", {{"Data", "DataFormat", "Attributes"}}]Import[
Export["dsets.h5", 1],
{{"Data", "Dimensions", "DataFormat"}}]Import[
Export["dsets.h5", {1, 2, 3}],
{{"Data", "Dimensions", "DataFormat"}}]Import[
Export["dsets.h5", RandomReal[1., {3, 4, 5}]],
{{"Dimensions", "DataFormat"}}]Export["dsets.h5", RandomComplex[{-1 - I, 1 + I}, {2, 3}]]Import["dsets.h5", {{"Data", "DataFormat"}, "Dataset1"}]Import["dsets.h5", {{"Data", "DataFormat"}, "Dataset1"}, "ComplexKeys" -> {"Re", "Im"}]Import[
Export["dsets.h5", "Hello World"],
{{"Data", "DataFormat"}, "Dataset1"}]ByteArrayは"ByteArray"型として保存される(HDF5では不透明型とも呼ばれる):
Import[
Export["dsets.h5", Table[ByteArray[Range[100]], 2]],
{{"Data", "DataFormat", "Dimensions"}, "Dataset1"}]文字列のキーを持つ連想は複合型要素としてエキスポートされる:
Export["file.h5", <|"Message" -> "Hello", "Numbers" -> {1, 2, 3}|>, "Datasets"]Import["file.h5", "Data"]初期サイズが2 x 2で,後で行数を10まで,列数を任意数まで拡張できるデータ集合を作成する:
Export["file.h5", "dset" -> {
"Data" -> {{1, 2}, {3, 4}},
"MaxDimensions" -> {10, ∞}
}]Import["file.h5", "dset"]//MatrixForm最初の行を整数5つのリストで上書きする.これによりデータ集合が5列に拡張される:
Export["file.h5", "dset" -> {Range[5]}, OverwriteTarget -> "Append", "AppendMode" -> "Overwrite"]Import["file.h5", "dset"]//MatrixForm"SpaceSelecion"サブ要素を使って3,4列目を上書きする:
Export["file.h5", "dset" -> {
"Data" -> {{16, 17}, {18, 19}},
"SpaceSelection" -> {All, 3 ;; 4}
}, OverwriteTarget -> "Append", "AppendMode" -> "Overwrite"]Import["file.h5", "dset"]//MatrixFormExport["file.h5", "dset" -> {
"Data" -> ConstantArray[1, {3, 4}],
"MaxDimensions" -> {∞, ∞}
}, "Datasets"]Import["file.h5", "dset"]//MatrixForm3 x 3の配列を加える.これは最初の次元に従ってのみ可能で,Exportは自動的にそれを検出する:
Export["file.h5", "dset" -> ConstantArray[2, {3, 3}], OverwriteTarget -> "Append"]Import["file.h5", "dset"]//MatrixFormExport["file.h5", "dset" -> ConstantArray[3, {2, 2}], OverwriteTarget -> "Append"]その場合,"SpaceSelection"を手動で指定する:
Export["file.h5", "dset" -> {
"Data" -> ConstantArray[3, {2, 2}],
"SpaceSelection" -> {4 ;; 5, 1 ;; 2}
}, OverwriteTarget -> "Append"]Import["file.h5", "dset"]//MatrixFormGroups (9)
HDF5ファイルは常にパス「/」の付いたルートグループを持つ:
Export["groups.h5", {}, "Groups"]Import["groups.h5", "Groups"]Export["groups.h5", {"/A", "/B", "/B/C"}, "Groups"];
Import["groups.h5", "StructureGraph"]グループは他のグループまたはデータ集合へのリンクを持つことができる:
Export["groups.h5", {"/A", "/B" -> "SoftLinks" -> <|"LinkToA" -> "/A"|>, "/B/C"}, "Groups"];
Import[%, "StructureGraph"]Export["groups.h5", {
"/A" -> "SoftLinks" -> {"Link/To/B" -> "B"}
}, "Groups"]ソフトリンクの参照先は.「 .」や「 ..」を含まない,有効なパスでなければならない:
Export["groups.h5", {"/A" -> "SoftLinks" -> {"Link" -> "../B"}}, "Groups"]ソフトリンクの参照先がない場合,リンクは未決定のリンクとなる:
Export["groups.h5", {
"/A" -> "SoftLinks" -> {"Link" -> "B"}
}, "Groups"]Import[%, "StructureGraph"]2つのグループ,データ集合,および1つのグループからデータ集合へのハードリンクを持つファイルを作成する:
Export["groups.h5", {"/A", "/B" -> "HardLinks" -> <|"LinkToA" -> "/A"|>, "/B/C"}, "Groups"];
Import[%, "StructureGraph"]存在しない場所を指す新しいハードリンクを加えることはできない:
Export["groups.h5", {
"/A" -> "HardLinks" -> {"NewHard" -> "/C"}
}, "Groups", OverwriteTarget -> "Append"];Export["groups.h5", {
"/A/newDset" -> Range[20]
}, OverwriteTarget -> "Append"];
Import[%, "StructureGraph"]「newDset」リンクがグループ「B」を指すようにリダイレクトを試みる:
Export["groups.h5", {
"/A" -> "HardLinks" -> {"newDset" -> "/B"}
}, "Groups", OverwriteTarget -> "Append"];Export["groups.h5", {
"/A" -> "HardLinks" -> {"newDset" -> "/B"}
}, "Groups", OverwriteTarget -> "Append", "AppendMode" -> "Overwrite"];
Import[%, "StructureGraph"]2つ目のデータ集合へのアクセスが不可逆的に失われた.ファイル内の領域はまだデータ集合によって使用されているので,これはリソースリークである.
ソフトリンクの場合と同様に,ハードリンクの名前も厳密に1つのパス要素で構成されなければならない:
Export["groups.h5", {
"/A" -> "HardLinks" -> {"X/Y" -> "Z"}
}, "Groups"];ハードリンクの参照先は.「.」や「..」を含まない,有効なパスでなければならない:
Export["groups.h5", {
"/A" -> "HardLinks" -> {"X" -> "../Y"}
}, "Groups"];NamedDatatypes (2)
Export["types.h5", "Types/SimpleString" -> "String", "NamedDatatypes"]Import["types.h5", "StructureGraph"]Export["types.h5", "Types/Person" -> {
"Type" -> <|
"Class" -> "Compound",
"Structure" -> <|
"FirstName" -> "String",
"LastName" -> "String",
"Age" -> "UnsignedInteger8",
"Characteristics" -> <|"Class" -> "Compound", "Structure" -> <|"Height" -> "UnsignedInteger8", "Weight" -> "Real32"|>|>
|>
|>
}, "NamedDatatypes", OverwriteTarget -> "Append"];Import["types.h5", "StructureGraph"]データ集合をエキスポートするとき,前にエキスポートした型を使用する:
Export["types.h5", "Dataset1" -> {
"Data" -> {
<|"FirstName" -> "John", "LastName" -> "Smith",
"Age" -> 43, "Characteristics" -> <|"Height" -> 172, "Weight" -> 80.2|>|>,
<|"FirstName" -> "Alison", "LastName" -> "Smith",
"Age" -> 38, "Characteristics" -> <|"Height" -> 167, "Weight" -> 57.5|>|>},
"DataFormat" -> "/Types/Person"
}, OverwriteTarget -> "Append"]Import["types.h5", {{"DataFormat", "Dimensions"}, "Dataset1"}]Import["types.h5", "Data"]Export["types.h5", "MyType" -> {
"Type" ->
<|"Class" -> "Compound",
"Structure" -> <|
"FirstName" -> "String", "LastName" -> "String",
"Age" -> "UnsignedInteger16",
"Characteristics" -> <|"Class" -> "Compound", "Structure" -> <|"Height" -> "Real32", "Weight" -> "Real32"|>|>
|>
|>,
"Attributes" -> {
"Units" -> <|"Age" -> "Years", "Characteristics" -> {"cm", "kg"}|>,
"CreationTime" -> UnixTime[]
}
}, "NamedDatatypes"];
Import["types.h5", {"Attributes", "/MyType"}]Importオプション (4)
"ComplexKeys" (1)
"TakeElements" (3)
Import["ExampleData/sample1.h5", "Integer/UInt8", "TakeElements" -> {{1, 1}, {2, 3}, {3, 1}}]これも同じであるが,データ集合をすべてインポートした後に部分を抽出するより効率的である:
Extract[Import["ExampleData/sample1.h5", "Integer/UInt8"], {{1, 1}, {2, 3}, {3, 1}}]要素の範囲指定を使ってデータ集合からある範囲のデータをインポートする:
Import["ExampleData/sample1.h5", "Integer/UInt8", "TakeElements" -> {2 ;; 3, 3 ;; 4}]オフセット,ストライド,ブロックを指定するサブオプションを使用する:
Import["ExampleData/sample1.h5", "Integer/UInt8", "TakeElements" -> {"Offset" -> {0, 1}, "Stride" -> 2, "Block" -> 1}]Exportオプション (8)
"AppendMode" (1)
OverwriteTarget"Append"を使って既存のファイルにデータを加える際,データ追加のためのエキスポート動作は"AppendMode"オプションで指定できる.デフォルトでは"AppendMode""Extend" が使われる.
Export["append.h5", {
"Datasets" -> "/gr1/ds1" -> Range[10]
}, "Rules"];
Import[%, "StructureGraph"]Export["append.h5", "gr2", "Groups", OverwriteTarget -> "Append"];
Import[%, "StructureGraph"]Export["append.h5", "gr2/ds2" -> Range[21, 30], OverwriteTarget -> "Append"];
Import[%, "StructureGraph"]"gr1/ds1"に属性を加え, "gr1"から"gr2"へのハードリンクも加える:
Export["append.h5", {
"Groups" -> "/gr2" -> "HardLinks" -> "link" -> "/gr1",
"Attributes" -> "/gr1/ds1" -> "Comments" -> "This is the first dataset."
}, "Rules", OverwriteTarget -> "Append", "AppendMode" -> "Extend"];
Import[%, "StructureGraph"]Import["append.h5", "Attributes"]"AppendMode""Extend"では既存の属性やリンクの値を変更することはできない:
Export["append.h5", {
"/gr1/ds1" -> "Comments" -> "Modified comment."
}, "Attributes", OverwriteTarget -> "Append", "AppendMode" -> "Extend"]"AppendMode""Overwrite"とすると,既存のオブジェクトを上書きしたり,ファイルに新しいオブジェクトを追加したりすることができる:
Export["append.h5", {
"/gr1/ds1" -> "Comments" -> "Modified comment."
}, "Attributes", OverwriteTarget -> "Append", "AppendMode" -> "Overwrite"]Import["append.h5", {"Attributes", "/gr1/ds1"}]"AppendMode""Overwrite"とすると,既存のデータ集合において,データ型と次元が合致する限り,データを変更することができる:
Import["append.h5", {{"Data", "DataFormat", "Dimensions"}, "/gr1/ds1"}]Export["append.h5", {
"/gr1/ds1" -> Reverse@Range[10]
}, OverwriteTarget -> "Append", "AppendMode" -> "Overwrite"];
Import[%, "/gr1/ds1"]ファイル内の既存の構造に変更を加えることなくファイルに新しいオブジェクトを追加するためには"AppendMode""Preserve"を使用する:
Export["append.h5", {
"Datasets" -> {
"/gr1/ds2" -> ByteArray[Range[20]]
},
"Groups" -> {
"/gr1" -> {"SoftLinks" -> "dset" -> "/gr2/ds2"}
},
"Attributes" -> {
"/gr1/ds2" -> "NewAttribute" -> 1
}
}, "Rules", OverwriteTarget -> "Append", "AppendMode" -> "Preserve"]ByteOrdering (1)
HDF5ではバイト順を選ぶことができる.ビッグエンディアンのファイルを作成するためにはByteOrdering-1を使う:
Export["littleEndian.h5", 3, ByteOrdering -> -1]Export["bigEndian.h5", 3, ByteOrdering -> 1]ReadByteArray["littleEndian.h5"] == ReadByteArray["bigEndian.h5"]Importバイト順に関係なく,正しく動作する:
Import["littleEndian.h5", "Data"] == Import["bigEndian.h5", "Data"]"ComplexKeys" (3)
デフォルトでは,複素数は"Re"キーと"Im"キーを使って複合型にエキスポートされる:
Export["complex.h5", 2 + 3I];
Import["complex.h5", {{"Data", "DataFormat"}, "Dataset1"}]Export["complex.h5", 2 + 3I, "ComplexKeys" -> {"re", "im"}];
Import["complex.h5", {{"Data", "DataFormat"}, "Dataset1"}]データを複素数としてインポートするためには,Importでキーを指定する:
Import["complex.h5", "Data", "ComplexKeys" -> {"re", "im"}]Export["dsets.h5", 2 + 3I, "ComplexKeys" -> {"Complex", "Complex"}]OverwriteTarget (3)
デフォルトでは,OverwriteTargetTrueとすると,Exportが呼び出されるたびに新しいファイルに書き込まれる:
Export["file.h5", Range[5]];
Import["file.h5", "Data"]Export["file.h5", Reverse@Range[5]];
Import["file.h5", "Data"]出力ファイルがすでに存在するときに OverwriteTargetFalseとすると,Exportの呼出しは失敗する:
Export["file.h5", Range[5]];
Import["file.h5", "Data"]Export["file.h5", Reverse@Range[5], OverwriteTarget -> False]HDF5等,特定の形式へのExportは設定OverwriteTarget"Append"をサポートする.これは出力ファイルを上書きするのではなく,出力ファイルが存在しているようにExportが振る舞う設定である:
Export["file.h5", "ds1" -> Range[5]];
Import["file.h5", "Data"]Export["file.h5", "ds2" -> Reverse@Range[5], OverwriteTarget -> "Append"];
Import["file.h5", "Data"]特性と関係 (1)
デフォルトでは,連想は複合型のデータ集合としてエキスポートされる:
Export["file.h5", <|"Message" -> "Hello", "Length" -> {1, 2, 3}|>, "Datasets"]Import["file.h5", "Data"]Import["file.h5", "DataFormat"]Export["file.h5", {"Message" -> "Hello", "Length" -> {1, 2, 3}}, "Datasets"]Import["file.h5", "Data"]Import["file.h5", "DataFormat"]考えられる問題 (2)
"Groups"はファイル内の各グループを一度だけリストする:
Import["ExampleData/structured.h5", "Groups"]"/group2"はファイル内のリストされていない有効なパスである:
Import["ExampleData/structured.h5", "StructureGraph"]Import["ExampleData/structured.h5", "/group2"]オブジェクトを属性のターゲットとしてリストしても,自動的には作成されない:
Export["attr.h5", {
"/newGroup" -> {
"attr1" -> 5
}
}, "Attributes"]Import["attr.h5"]関連するガイド
-
▪
- インポートとエキスポート ▪
- 全形式のリスト ▪
- 科学,医学データ形式 ▪
- 行列と線形代数 ▪
- 数値データ形式
履歴
2004 で導入 (5.1) | 2019 で更新 (12.0) ▪ 2020 (12.2)