低水準関数による HDF4 ファイルのインポート
この例では、matlat.io.hdf4.sd
パッケージの関数を使用して、HDF4 ファイルの科学データセットからデータを読み取る方法を説明します。HDF4 の用語では、HDF4 ファイルに保存された数値配列をデータセットと呼びます。
インポート リストへのパッケージの追加
matlab.io.hdf4.*
パスをインポート リストに追加します。
import matlab.io.hdf4.*
その後の matlat.io.hdf4.sd
パッケージ内の関数の呼び出しには、パッケージのパス全体ではなく、sd
のみを接頭辞として指定する必要があります。
HDF4 ファイルを開く
関数 matlab.io.hdf4.sd.start
を使用して、サンプルの HDF4 ファイル sd.hdf
を開き、読み取りアクセスを指定します。この関数は、SD API のルーチン SDstart
に相当します。
sdID = sd.start('sd.hdf','read');
sd.start
は、HDF4 SD ファイル識別子 sdID
を返します。
HDF4 ファイルの情報の取得
関数 matlab.io.hdf4.sd.fileInfo
を使用して、ファイルのデータセット数とグローバル属性を取得します。この関数は、SD API のルーチン SDfileinfo
に相当します。
[ndatasets,ngatts] = sd.fileInfo(sdID)
ndatasets = 4
ngatts = 1
ファイル sd.hdf
には、データセットが 4 つ、グローバル属性が 1 つあります。
HDF4 ファイルの属性の取得
最初のグローバル属性の内容を取得します。HDF4 は 0 ベースのインデックスを使用しているため、インデックス値 0 は最初のインデックスを示します。
HDF4 ファイルには、オプションとして、ファイルに含まれているデータを記述する "属性" と呼ばれる情報を含めることができます。HDF4 ファイル全体に関連付けられている属性は "グローバル" 属性と呼ばれます。データセットに関連付けられている属性は "ローカル" 属性と呼ばれます。
attr = sd.readAttr(sdID,0)
attr = '02-Sep-2010 11:13:16'
インポートするデータセットの選択
データセット temperature
のインデックス番号を特定します。次に、そのデータセットの識別子を取得します。
idx = sd.nameToIndex(sdID,'temperature');
sdsID = sd.select(sdID,idx);
sd.select
は、HDF4 SD データセット識別子 sdsID
を返します。
データセット情報の取得
関数 matlab.io.hdf4.sd.getInfo
を使用して、sdsID
で指定されているデータセットの情報を取得します。この関数は、SD API のルーチン SDgetinfo
に相当します。
[name,dims,datatype,nattrs] = sd.getInfo(sdsID)
name = 'temperature'
dims = 1×2
20 10
datatype = 'double'
nattrs = 11
sd.getInfo
は、データセットの名前、サイズ、データ型、属性の数に関する情報を返します。
データセット全体の読み取り
データセット識別子 sdsID
で指定するデータセット全体の内容を読み取ります。
data = sd.readData(sdsID);
データセットの一部の読み取り
2 行目の最初の列から、データセットの 2 行 4 列の部分を読み取ります。関数 matlab.io.hdf4.sd.readData
を使用します。この関数は、SD API のルーチン SDreaddata
に相当します。start
の入力は、データセット内でデータの読み取りの開始位置を指定するインデックス値のベクトルです。count
の入力は、各データセットの次元に沿って読み取る要素の数を指定するベクトルです。
start = [0 1]; count = [2 4]; data2 = sd.readData(sdsID,start,count)
data2 = 2×4
21 41 61 81
22 42 62 82
HDF4 データセットを閉じる
データセットへのアクセスを閉じるには、関数 matlab.io.hdf4.sd.endAccess
を使用します。この関数は、SD API のルーチン SDendaccess
に相当します。HDF4 ファイルを閉じる前に、ファイル内のすべてのデータセットへのアクセスを閉じなければなりません。
sd.endAccess(sdsID)
HDF4 ファイルを閉じる
HDF4 ファイルを閉じるには、関数 matlab.io.hdf4.sd.close
を使用します。この関数は、SD API のルーチン SDend
に相当します。
sd.close(sdID)
参考
sd.getInfo
| sd.readData
| sd.endAccess
| sd.close
| sd.start
| sd.fileInfo