Main Content

hdfread

HDF4 ファイルまたは HDF-EOS2 ファイルからのデータの読み取り

構文

data = hdfread(filename, datasetname)
data = hdfread(hinfo)
data = hdfread(...,param,value,...)
data = hdfread(filename,EOSname,param,value,...)
[data,map] = hdfread(...)

説明

data = hdfread(filename, datasetname) は、filename で指定された HDF4 ファイルまたは HDF-EOS2 ファイルから、datasetname で指定されたデータ セットのすべてのデータを返します。HDF4 ファイルのデータ セットの名前を判定するには、関数 hdfinfo を使います。

メモ

hdfread は、HDF4 ファイルまたは HDF-EOS2 ファイルに使用できます。HDF5 ファイルからデータを読み取るには、h5read を使用します。

data = hdfread(hinfo) は、関数 hdfinfo で返された、構造体 hinfo によって指定されたデータ セットのすべてのデータを返します。データ セットが複数ある場合、データ セットのタイプを記述する構造体 hinfo のフィールドを指定し、インデックスを使用してデータ セットを指定します。詳細については、読み取るデータ セットの指定を参照してください。

data = hdfread(...,param,value,...) は、指定されたパラメーターと値のペアに従ってデータのサブセットを返します。さまざまな型のデータ セットの使用可能なパラメーターと値については、次の表を参照してください。

data = hdfread(filename,EOSname,param,value,...) は、EOSname で指定された HDF-EOS のポイント、グリッドまたは swath からデータ フィールドをサブセット化します。

[data,map] = hdfread(...) は 8 ビット ラスター イメージのイメージ data およびカラーマップ map を返します。

サブセット化パラメーター

次の表は、特定の種類の HDF4 データに対して、関数 hdfread で使用できるサブセット化パラメーターを示します。これらのデータ型を以下に示します。

次の点には、注意してください。

  • 1 つのパラメーターで複数の値が必要な場合、cell 配列を使用して、値を保存する必要があります。たとえば 'Index' パラメーターは 3 つの値 startstride および edge を必要とします。これらの値は、cell 配列として、中かっこで囲みます。

    hdfread(..., 'Index', {start,stride,edge})
  • インデックス付けされたすべての値は、1 ベースです。


HDF Scientific Data(SD) データ セット用のサブセット化パラメーター

HDF SD ファイルと共に起動する場合、関数 hdfread は、次の表に示されているパラメーターをサポートしています。

パラメーター

説明

'Index'

3 要素の cell 配列 {start,stride,edge} で、データ セットから読み込む位置、範囲、値を指定します。

  • start — ファイルの中で、読み始める位置を指定する 1 ベースの配列。

    既定の設定: 1 で、個々の次元の最初の要素で開始する位置。指定された値は、データ セットの任意の次元のサイズを超えてはなりません。

  • stride — 読み込む値の間を指定する 1 ベースの配列。

    既定の設定: 1 で、データ セットのすべての要素。

  • edge — 読み込む個々の次元の長さを指定する 1 ベースの配列。

    既定の設定: 対応する次元の長さを含む配列。

たとえば、以下のコードは、HDF ファイル example.hdf からデータ セット Example SDS を読み込みます。'Index' パラメーターは、関数 hdfread が、個々の次元の最初の部分で、データを読み始める位置を指定し、個々の次元の終わりまで読み込みます。

data = hdfread('example.hdf','Example SDS','Index',{[],[2 1],[]})

HDF Vdata セット用のサブセット化パラメーター

HDF Vdata ファイルを使う場合、関数 hdfread は以下のパラメーターをサポートしています。

パラメーター

説明

'Fields'

読み取るフィールドの名前を指定する文字ベクトルまたは string スカラー。複数のフィールド名を指定する場合は、文字ベクトルの cell 配列または string 配列を使用します。

'FirstRecord'

どの記録から読み始めるかを指定する 1 ベースの数字。

'NumRecords'

読み込むレコードの総数を指定する数字。

たとえば、以下のコードは、HDF ファイル example.hdf から Vdata セット Example Vdata を読み取ります。

data = hdfread('example.hdf','Example Vdata','FirstRecord', 2,'NumRecords', 5)

HDF-EOS グリッド データ用のサブセット化パラメーター

HDF-EOS グリッド データを使う場合、関数 hdfread は、以下の 3 つのパラメーターをサポートします。

  • 必須パラメーター

  • オプション パラメーター

  • 排他的なパラメーター — 関数 hdfread への 1 つの呼び出しの中で、これらのパラメーターの 1 つのみを設定することができ、オプションのパラメーターと組み合わせてこれらのパラメーターを使うことはできません。

    パラメーター

    説明

    必須パラメーター

    'Fields'

    読み取るフィールドを指定する文字ベクトルまたは string スカラー。Grid データ セットに対して、1 つのフィールド名のみ指定できます。

    排他的なパラメーター

    'Index'

    3 要素の cell 配列 {start,stride,edge} で、データ セットから読み込む位置、範囲、値を指定します。

    start — ファイルの中で、読み始める位置を指定する配列。

    既定の設定: 1 で、個々の次元の最初の要素で開始する位置。指定された値は、データ セットの任意の次元のサイズを超えてはなりません。

    stride — 読み込む値の間を指定する配列。

    既定の設定: 1 で、データ セットのすべての要素。

    edge — 読み込む個々の次元の長さを指定する配列。

    既定の設定: 対応する次元の長さを含む配列。

    'Interpolate'

    2 要素 cell 配列 {longitude,latitude} で、双一次内挿用の領域を定義する点の経度と緯度を表すものです。個々の要素は、経度座標と緯度座標を指定する長さ N のベクトルです。

    'Pixels'

    2 要素 cell 配列 {longitude,latitude} で、領域を定義する点の経度と緯度の座標を表します。個々の要素は、経度座標と緯度座標を指定する長さ N のベクトルです。この領域は、グリッドの左上隅に原点をもつピクセル単位の行と列に変換します。

    メモ: これは、'Box' 領域を設定するものとピクセルで等価になります。

    'Tile'

    タイルをサポートしている HDF-EOS Grid ファイルに対して、読み込むタイルの座標を指定するベクトル。

    オプション パラメーター

    'Box'

    2 要素 cell 配列 {longitude,latitude} で、領域を定義する経度座標と緯度座標を指定します。longitude および latitude は、経度座標と緯度座標を指定するそれぞれ 2 要素のベクトルです。

    'Time'

    2 要素 cell 配列 [start stop] です。ここで、start および stop は、時間の範囲の最初と最後を指定する数値です。

    'Vertical'

    2 要素 cell 配列 {dimension, range}

    dimension — 読み取るデータ セット フィールドの名前を指定する文字ベクトルまたは string スカラー。Grid データ セットに対して、1 つのフィールド名のみ指定できます。

    range — 2 要素配列で、サブセットの最小と最大を設定します。dimension が次元の名前の場合、range は、抽出する要素の範囲を指定します。dimension がフィールド名の場合、range は、抽出する値の範囲を指定します。

    'Vertical' のサブセット化は、単独で使用するか、'Box' または 'Time' と組み合わせて使用できます。複数の次元に沿っての領域のサブセット化に対して、垂直のサブセット化は、関数 hdfread への 1 回の呼び出しで、8 回まで使うことができます。

以下に例を示します。

data = hdfread('grid.hdf','PolarGrid','Fields','ice_temp','Index', {[5 10],[],[15 20]})

HDF-EOS ポイント データ用のサブセット化パラメーター

HDF-EOS ポイント データを使って、関数 hdfread は、2 つの必須パラメーターと 3 つのオプション パラメーターを使用します。

パラメーター

説明

必須パラメーター

'Fields'

読み取るデータ セット フィールドの名前を含む文字ベクトルまたは string スカラー。複数のフィールド名の場合は、文字ベクトルの cell 配列または string 配列を使用します。

'Level'

HDF-EOS ポイント データ セットの中から読み込まれるレベルを指定する 1 ベースの数値

排他的なパラメーター

'Box'

2 要素 cell 配列 {longitude,latitude} で、領域を定義する経度座標と緯度座標を指定します。longitude および latitude は、経度座標と緯度座標を指定するそれぞれ 2 要素のベクトルです。

'RecordNumbers'

読み込まれるレコード数を指定するベクトル

'Time'

2 要素 cell 配列 [start stop] です。ここで、start および stop は、時間の範囲の最初と最後を指定する数値です。

以下に例を示します。

hdfread(...,'Fields',{field1, field2},...
            'Level',level,'RecordNumbers',[1:50, 200:250])

HDF-EOS Swath データ用のサブセット化パラメーター

HDF-EOS Swath データを使う場合、関数 hdfread は、以下の 3 つのパラメーターをサポートします。

  • 必須パラメーター

  • オプション パラメーター

  • 排他的なパラメーター

hdfread への 1 つの呼び出しの中で、排他的なパラメーターの 1 つのみを設定することができ、オプションのパラメーターと組み合わせてこれらのパラメーターを使うことはできません。

パラメーター

説明

必須パラメーター

'Fields'

読み取るデータ セット フィールドの名前を含む文字ベクトルまたは string スカラー。Swath データ セットに対して、1 つのみのフィールド名を指定することができます。

排他的なパラメーター

'Index'

3 要素の cell 配列 {start,stride,edge} で、データ セットから読み込む位置、範囲、値を指定します。

  • start — ファイルの中で、読み始める位置を指定する配列。

    既定の設定: 1 で、個々の次元の最初の要素で開始する位置。指定された値は、データ セットの任意の次元のサイズを超えてはなりません。

  • stride — 読み込む値の間を指定する配列。

    既定の設定: 1 で、データ セットのすべての要素。

  • edge — 読み込む個々の次元の長さを指定する配列。

    既定の設定: 対応する次元の長さを含む配列。

'Time'

3 要素 cell 配列 {start, stop, mode} で、startstop は期間の始点と終点を指定し、mode は領域内にクロス トラックが含まれるかどうかの条件を定義する文字ベクトルまたは string スカラーです。クロス トラックは、以下の条件のいずれかを満たす領域の内部です。

  • その中点は、ボックス内に存在する (mode='midpoint')

  • どちらかの端点が、ボックス内に存在する (mode='endpoint')

オプション パラメーター

'Box'

3 要素 cell 配列 {longitude, latitude, mode} で、領域を定義する経度座標と緯度座標を指定します。longitudelatitude は、経度座標と緯度座標を指定するそれぞれ 2 要素のベクトルです。mode は、領域内にクロス トラックが含まれるかどうかの条件を定義する文字ベクトルまたは string スカラーです。クロス トラックは、以下の条件のいずれかを満たす領域の内部です。

  • その中点は、ボックス内に存在する (mode='midpoint')

  • どちらかの端点が、ボックス内に存在する (mode='endpoint')

  • 任意の点が、ボックス内に存在する (mode='anypoint')

'Vertical'

2 要素 cell 配列 {dimension, range}

  • dimension は、データのサブセット化の基準にする次元名またはフィールド名のいずれかを指定する文字ベクトルまたは string スカラーです。

  • range は、要素配列で、サブセットの最小と最大を設定します。dimension が次元の名前の場合、range は、抽出する要素の範囲を指定します。dimension がフィールド名の場合、range は、抽出する値の範囲を指定します。

    'Vertical' のサブセット化は、単独で使用するか、'Box' または 'Time' と組み合わせて使用できます。複数の次元に沿っての領域のサブセット化に対して、垂直のサブセット化は、関数 hdfread への 1 回の呼び出しで、8 回まで使うことができます。

以下に例を示します。

hdfread('swath.hdf', 'Example Swath', 'Fields', 'Temperature', ...
         'Time', {5000, 6000, 'midpoint'})

すべて折りたたむ

HDF ファイルの名前およびデータ セットの名前を指定します。この例では、temperature という名前のデータ セットをサンプル HDF ファイルから読み取ります。

data = hdfread('sd.hdf','temperature');

hdfinfo を呼び出して、HDF ファイルの内容に関する情報を取得します。

fileinfo = hdfinfo("sd.hdf")
fileinfo = 

  struct with fields:

      Filename: 'matlabroot\matlab\toolbox\matlab\matlab_sci\hdf4\sd.hdf'
    Attributes: [1×1 struct]
           SDS: [1×2 struct]
         Vdata: [1×1 struct]

hdfinfo によって返されるデータから、インポートする特定のデータ セットに関する情報を含む構造体を抽出します。この例では、SDS フィールドの構造体を使用して、科学データ セットを取得します。

sds_info = fileinfo.SDS(2)
sds_info = 

  struct with fields:

       Filename: 'matlabroot\matlab\toolbox\matlab\matlab_sci\hdf4\sd.hdf'
           Type: 'Scientific Data Set'
           Name: 'temperature'
           Rank: 2
       DataType: 'double'
     Attributes: [1×11 struct]
           Dims: [2×1 struct]
          Label: {}
    Description: {}
          Index: 1

この構造体を hdfread に渡し、データ セット内のデータをインポートします。

data = hdfread(sds_info);

例のファイル example.hdf の HDF-EOS グローバル グリッド フィールド TbOceanRain からデータを読み取ります。

data1 = hdfread('example.hdf','MonthlyRain','Fields','TbOceanRain');

同じフィールドで北半球のデータを読み取ります。Box パラメーターを使用して、その領域の経度座標と緯度座標を指定します。

data2 = hdfread('example.hdf','MonthlyRain', ...
'Fields','TbOceanRain', ...
'Box', {[0 360],[0 90]});

例のファイル example.hdf に関する情報を取得します。

fileinfo = hdfinfo('example.hdf');

example.hdf の科学データ セットに関する情報を取得します。

data_set_info = fileinfo.SDS;

データ セットのサイズを確認します。

data_set_info.Dims.Size
ans = 
16
ans = 
5

hdfread'index' パラメーターを使用して、データ セット内のデータのサブセットを読み取ります。この例では、開始インデックス [3 3]、値の間隔 1 ([] は既定値 1 を意味する)、および長さ 10 行 2 列を指定します。

data = hdfread(data_set_info,'Index',{[3 3],[],[10 2]});
data(:,1)
ans = 10x1 int16 column vector

    7
    8
    9
   10
   11
   12
   13
   14
   15
   16

data(:,2)
ans = 10x1 int16 column vector

    8
    9
   10
   11
   12
   13
   14
   15
   16
   17

hdfinfo により返される情報から Vdata フィールドを使用して、3 つのデータ フィールド IdxTemp および Dewpt を読み取ります。

s = hdfinfo('example.hdf'); 
data = hdfread(s.Vdata(1),'Fields',{'Idx','Temp','Dewpt'})
data=3×1 cell array
    {[  1 2 3 4 5 6 7 8 9 10]}
    {[0 12 3 5 10 -1 3 0 2 1]}
    {[5 5 7 11 7 10 4 14 4 8]}

バージョン履歴

R2006a より前に導入

参考