Development Environment    

HDFデータのMATLABワークスペースへのインポート

HDFデータを、MATLABにインポートするには、固有のHDF データタイプに関連した HDF API でルーチンを使用する必要があります。各々のAPI は、固有のプログラミングモデル、すなわち、ルーチンを使って、HDF ファイルをオープンし、ファイルの中のデータにアクセスし、データセット(HDFファイルの中に保存されている数値配列をデータセットと呼びます)からデータを読むことを前もって設定しています。

この概念を示すために、この節では、一つの特別な HDF API、すなわち、Scientific Data(SD) のプログラミングモデルの詳細を示します。他のHDF API の取り扱いに関する情報は、オフィシャルなNCSA ドキュメントを参照してください。

HDF SD インポートプログラミングモデル

HDF SD データをインポートするには、APIルーチンを使って、つぎに作業を行なってください。

  1. HDF ファイルのオープン
  2. HDFファイル内のデータセットの選択
  3. HDFファイルからデータを読み込む
  4. HDFファイル、HDFデータセットのクローズ

必要な操作は以上ですが、HDFファイルの内容、または、ファイル内のデータセットに関する情報を抽出するといったいくつかの操作をオプションで行うこともできます。つぎの節で、基本操作とオプション操作の双方について、詳しく解説します。

HDFファイルのオープン

HDFデータをインポートするには、先ず、HDFファイルをオープンする必要があります。SD APIでは、SDstart 関数を使ってファイルをオープンし、HDFインタフェースを初期化します。

SDstart には、つぎの引数を設定します。

たとえば、つぎのコードは、読み出し専用で、ファイルmydata.hdf を開きます。

SDstart が指定したファイルを検出し、オープンできれば、SDファイルの識別子を戻します。この例題では、sd_idになります。オープンできない場合は、-1になります。

HDF ファイルは、いくつかのアクセスモードをサポートしています。HDFインタフェースで定義されたシンボリック定数を使って、各モードを指定します。MATLABでは、これらの定数を文字列で指定できます。省略なしの完全なスペルで入力することもできますが、下の表にリスト表示されている省略形を入力しても構いません。

HDF ファイル作成モード
HDF シンボリック定数
MATLAB 文字列
新規ファイルの作成
'DFACC_CREATE'
'create'
読み取り専用
'DFACC_RDONLY'
'read' または、
'rdonly'

Read and write access
'DFACC_RDWR'
'rdwr' または、
'write'

HDFファイルに関する情報の抽出

HDFファイルを開いた後に、関数SDfileinfoを使って、ファイルの内容に関する情報を得ることができます。この関数は、ファイル内のデータセットの数や、ファイルが何らかのグローバル属性を含んでいるかどうかについて出力します(グローバル属性に関する詳細は、HDFファイルから属性の抽出を参照してください)。

唯一の引数として、SDfileinfo は、SDstartによって戻されるSD識別子sd_idを受け入れます。この例題で、HDFファイルは、3つのデータセットと1つのグローバル属性を含んでいます。

HDFファイルから属性の抽出

HDF ファイルは、ファイル内部に自身の情報を記録しておくことができます。すなわち、オプションで、属性と呼ばれるもので、含んでいるデータを記述するものです。HDFファイルに関連した属性は、グローバル属性と呼ばれます(ユーザは、データセット、または、次元と属性を関連付けします。これらの属性に関する詳細は、メタデータをHDFファイルに埋め込むを参照してください)。

HDFファイルからグローバル属性を引き出すには、 SDreadattr 関数を使用します。関数 SDreadattr には、つぎの引数を設定できます。

たとえば、つぎのコードは、最初のグローバル属性の内容(単純なキャラクタ文字列 'my global attribute')を出力します。

MATLAB は、自動的に出力値attrのサイズを、属性内のデータに適するものに設定します。

名前で属性を抽出する   属性は値と名前をもっています。属性の名前が判明している場合は、関数SDfindattrを使い、インデックス値を定めて属性を抽出することもできます。

SDfindattr には、つぎの引数を設定できます。

関数SDfindattr は、SDオブジェクトに関連した全ての属性を検索します。指定した名前の属性を検知できれば、関数 SDfindattr は、その属性のインデックスを出力します。出力されたインデックス値を使って、関数SDreadattrで属性を抽出することが可能となります。

つぎの例では、my_attと名付けられた属性のインデックスを、関数SDfindattr により取得し、そのインデックスを、関数SDreadattrの引数として、受け渡す処理を行います。

HDFファイル内のデータセットの選択

HDFファイルをオープンした後、ファイル内の読みたいデータセットを指定します。1つのHDFファイルが、複数のデータセットから構成されていることもあります。その場合、関数SDselect で、データセットを選択してください。

SDselect には、つぎの引数を設定できます。

たとえば、つぎのコードは、sd_idという識別子をもつHDFファイルの3番目のデータセットを選択しています。関数SDselect が、ファイル内から指定したデータセットを見つけだすと、SDデータセット識別子(例題では、sds_id )が出力されます。データセットが発見できなかった場合、-1が出力されます。

名前でデータセットを抽出

HDFファイルにデータセットを作る場合、データセットには名前が割り当てられます。参照したいデータセットの名前を知っていれば、インデックス値を知らなくとも、SDnametoindex ルーチンを使って、インデックスを確定することができます。

データセットに関する情報の取得

HDFファイル内のデータセットを選択すると、関数SDgetinfoを使って、データセットに関する情報(配列次元のサイズ、数など)を得ることができます。関数SDreaddataを使って、データセットを読み込む時にこれらの情報が必要となります( 詳細については、HDFファイルからデータを読み込むを参照してください)。

関数SDgetinfo には、1つの引数のみ設定できます。引数として設定できるのは、SDselect (sds_id)によって出力されるデータセット識別子です。関数SDgetinfo は、データセットに関するつぎのアイテムを含む、詳細情報を出力します。

たとえば、つぎのコードは、識別子sds_idをもつデータセットに関する情報を抽出します。

データセット属性の抽出

HDFファイル同様、HDF SDデータセットもファイル内部に情報を記録しておくことができます。すなわち、オプションでファイルの中に属性と呼ばれる情報を含めておくことができます。データセットに関連付けられた属性をローカル属性と呼びます(属性をデータセットや次元と関連付けることもできます。これらの属性に関する詳細については、メタデータをHDFファイルに埋め込むを参照してください)。

ローカル属性を抽出するには、SDreadattr 関数を使用します。 SDreadattr関数には、つぎの引数を設定できます。

つぎのサンプルコードは、識別子sds_idをもつデータセットに関連付けられた最初の属性の内容を出力します。この場合、属性の値は、キャラクタ文字列'my local attribute'となります。MATLAB は、自動的に出力値ds_attrのサイズを属性の値に適した大きさに設定します。

HDFファイルからデータを読み込む

HDFファイルをオープンし、ファイル内のデータセットを選択すると、データセット全体、または、その一部を、関数SDreaddata を使って、読むことができるようになります。

SDreaddata 関数には、つぎの引数を設定できます。

つぎのサンプルコードは、関数SDreaddataを使って、3 行5 列の数値行列からなるデータセットの全内容を読み込む操作を行います。

この例では、サンプルコードが、関数SDreaddataに対する引数の値を指定する上で、関数SDgetinfo の出力値を、どのように指定しているかに着目してください。

この例では、つぎの点に注目してください。

データセットの一部分を読み込む

データセットの一部分を読み込むには、start、stride、edgesの各ベクトルの値を、読み始めたい部分、読み込みたいデータ数に合わせて設定してください。

つぎのサンプルコードは、サンプルデータセットの2行目

を全て読み込む操作を行います。start, stride, edges引数では、列を優先した順番で次元を指定しなければなりません。加えて、これらの引数で用いるインデックス値は、ゼロベースでなくてはなりません。

データセットの範囲をどのように指定するかに関する詳細情報は、MATLABデータをHDFファイルに書き出すを参照してください。

HDFファイル、HDFデータセットのクローズ

HDFファイルのデータセットからデータを読み込んだら、データセットとHDFファイルへのアクセスを終了しなくてはなりません。HDF SD APIには、HDFファイル、HDFデータセットをクローズする機能も用意しています。詳細については、HDFデータセットとファイルのクローズを参照してください。


 MATLAB HDF 関数呼び出し方法 HDFフォーマットでデータのエクスポート