Development Environment    

HDFフォーマットでデータのエクスポート

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

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

HDF SD エクスポートプログラミングモデル

HDF SDデータをエクスポートするプログラミングモデルは、つぎの操作を実行します。

  1. HDFファイルの作成、または、既存のHDFファイルのオープン
  2. ファイル内にデータセットを作成、または、既存のデータセットの選択
  3. データをデータセットへ書き込む
  4. HDFデータセットとファイルのクローズ

ユーザは、HDFファイルに自身のデータを説明する情報を埋め込むことができます。この点の詳細については、メタデータをHDFファイルに埋め込むを参考にしてください。

HDFファイルの作成

MATLABデータをHDFフォーマットでエクスポートするには、先ず、HDFファイルを作成するか、既存のHDFファイルをオープンする必要があります。これらの操作を行うには、関数SDstartを使用してください。

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

たとえば、つぎのコードは、mydata.hdfと名付けられたHDFファイルを作成します。

ファイルを作成、または、オープンすることができれば、SDstart は、SDファイルの識別子(この例では、sd_id)を出力します。作成、または、開くことができなければ、-1を出力します。

DFRACC_CREATEアクセスモードを指定すると、関数SDstart は、ファイルを作成し、HDF SDマルチファイルインタフェースを初期化します。DFACC_CREATE モードを指定し、ファイルが既に存在している場合、関数SDstart は実行できずに、-1を出力します。既存のHDFファイルを開くには、HDF read、または、writeモードに設定する必要があります。これらのモードで、関数SDstart をどのように使用するかについては、HDFファイルのオープンを参照してください。

HDFデータセットの作成

HDF ファイルを作成、または、既存のHDFファイルをオープンした後、エクスポートしたい各MATLAB配列に対して、HDFファイルで、データセットを作成する必要があります。関数SDcreateを使って、データセットを作成することができます(既存のデータセットをHDFファイルに書き出すには、関数SDselect を使用してください。詳細は、HDF ファイル内のデータセットの選択を参照してください)。

関数SDcreateには、つぎの引数が使用可能です。

これらの引数に割り当てる値は、エクスポートしたいMATLAB配列によって決まります。たとえば、つぎの3行5列のMATLAB倍数配列をエクスポートするには、

この部分的に表しているコードの通りに引数の値を設定します。

関数SDcreate が、うまくデータセットを作成できれば、SDデータセット識別子(sds_id)を出力します。失敗すれば、SDcreate は、 -1を出力します。

一度データセットを作成すると、その特性を変更することはできません。しかし、データセットを構成するデータを修正することは可能です。データを修正するには、データセットへのアクセスを初期化し、SDselectを使用し、MATLABデータをHDFファイルに書き出すで説明している方法で、データセットの書き出し処理を行います。

MATLABデータをHDFファイルに書き出す

HDFファイルを作成し、ファイル内にデータセットを作成した後、SDwritedata関数を使って、データセットにデータを書き込むことが可能となります。関数 SDwritedataを使えば、データセット全体、または、データセットの一部分にデータを書き込むことが可能となります。

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

これらの引数に割り当てる値は、エクスポートしたいMATLAB配列によって決まります。たとえば、つぎのコードの一部は、MATLABの3行5列の倍数の配列

をHDFファイルに書き出したものです。

データをデータセットに書き出すことができれば、関数SDwritedata は、0を出力します。そうでなければ、-1を出力します。

データをデータセットの一部に書き出す

データセットの一部分を書き出すには、start、stride、edgesの各ベクトルの値を使って、書き出したいスタート位置と書き出したいデータ数に合わせて設定してください。

つぎの例題は、サンプルデータセットの2番目の行のすべての要素を、SDwritedataを使って、

ベクトルBと置き換えるものです。

例題では、startベクトルは、2行目の最初の列に書き込み操作を始めたい点をベクトルで示しています。 HDFは、ゼロベースのインデックス値をどのように使用し、列の次元を最初に指定するかに着目してください。MATLABでは、この位置を(2,1)とします。edges引数には、書き出すデータの次元を指定します。書き出されるデータ配列のサイズとedgeで指定した値は必ず一致しなくてはなりません。

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

データをHDFファイルの中のデータセットに書き出した後は、SDendaccess ルーチンを使って、データセットへのアクセスをクローズする必要があります。SDendaccessへの引数は、正しい SD データセット識別子を設定するものです。この例題は、sds_idです。

データセットを閉じた後に、関数SDendを使って、HDFファイルもクローズする必要があります。SDendへの唯一の引数として、正しい SD ファイル識別子(ここでは、sd_id)を設定します。

SDファイルとデータセット識別子を任意の順にクローズすることができます。しかし、データセットを含むHDFファイルをクローズする前に、データセットへのアクセスを停止する必要があります。


 HDFファイルからデータのインポート メタデータをHDFファイルに埋め込む