Main Content

cdfread

CDF (Common Data Format) ファイルからデータを読み取る

構文

data = cdfread(filename)
data = cdfread(filename,Name1,Value1,...,NameN,ValueN)
[data,info] = cdfread(filename,...)

説明

data = cdfread(filename) は、filename で指定された CDF (Common Data Format) ファイルから、すべてのデータを読み取ります。filename は string スカラーまたは文字ベクトルとして指定します。CDF データセットには通常、変数の集合が格納されており、個々の変数は特定のデータ型をもち、レコードの集合が関連付けられています。変数は、個々のレコードについて、ある観測値が記録された特定の時間を表す時間値である場合もあります。cdfread は、すべてのデータを 1 つの cell 配列で返します。ここでは各列が変数を表し、各行が変数に関連付けられているレコードを表します。変数に関連付けられるレコード数がさまざまである場合、cdfread は行を付加 (pad) して四角形の cell 配列を作成し、CDF ファイルで定義されている pad 値を使用します。

メモ

cdfread は一時ファイルを作成するため、現在の作業ディレクトリは書き込み可能でなければなりません。

data = cdfread(filename,Name1,Value1,...,NameN,ValueN) は、ファイルからデータを読み取ります。ここで、Name1、…、NameN には、次の表に示す任意の名前と値の引数を指定できます。

[data,info] = cdfread(filename,...) は、CDF ファイルに関する詳細を info 構造体で返します。

名前と値の引数
"Records"

読み取るレコードを指定するベクトル。レコード番号は 0 ベースです。cdfread が返す cell 配列では、行数は読み取ったレコード数と同じで、列数は変数と同じ数になります。

"Variables"

ファイルから読み取る単一の変数の名前を指定する string スカラーまたは文字ベクトル、またはファイルから読み取る 1 つ以上の変数の名前を指定する 1 行 n 列または n 行 1 列の cell 配列。n は、ファイル内の変数の総数以下でなければなりません。cdfread が返す cell 配列では、列数は読み取った変数の数と同じで、読み取った個々のレコードごとに 1 行をもっています。

"Slices"

m 行 3 列の配列。ここで各行は、変数の特定の次元で読み取りを開始する位置、その次元で使用するスキップ インターバル (すべての要素、要素 1 つおきなど)、およびその次元で読み取る値の総数を指定します。m は、変数の次元数以下でなければなりません。m が次元の総数より少ない場合、cdfread は未指定の次元からすべての値 ([0 1 n]、n はその次元に含まれる要素の総数) を読み取ります。

メモ: 名前と値の引数 Slices は単一の変数の処理方法を記述するものであるため、名前と値の引数 Variables と共に使用しなければなりません。

"DatetimeType"

CDF_TIME_TT2000 および CDF_EPOCH データ型の戻り値の型を制御する string スカラーまたは文字ベクトル。DatetimeType"datetime" (CDF_TIME_TT2000 の既定値) に設定されている場合、cdfread は値を datetime 型として返します。DatetimeType"native" に設定されている場合、cdfreadCDF_TIME_TT2000 値を int64 型、CDF_EPOCH 値を double 型として返します。

"CombineRecords"

cdfread がファイルから読み取った CDF データセットを返す方法を決定する logical 値。CombineRecordsfalse (既定値) に設定されている場合、cdfread はデータを m 行 n 列の cell 配列に格納します。ここで、m はレコード数、n は要求された変数の数です。CombineRecordstrue に設定されている場合、cdfread は特定の変数のレコードをすべて、出力 cell 配列の 1 つの cell に結合します。この cell に cdfread は、スカラー データを列配列として格納します。cdfread は、非スカラー データおよび string データの次元を拡張します。たとえば、レコードごとに 20 行 30 列の配列が含まれる 1,000 個の要素を作成する代わりに、cdfread はすべてのレコードを、1000×20×30 の配列として 1 つの cell に格納します。

メモ: 名前と値の引数 Records を使用して読み取るレコードを指定する場合、名前と値の引数 CombineRecords は使用できません。

メモ: 名前と値の引数 Variables を使用して 1 つの変数を読み取る場合、名前と値の引数 CombineRecordstrue であれば、cdfread はデータを m 行 n 列の数値または文字配列として返します。1 つの cell 配列にデータを詰め込むことはしません。

メモ

大きいデータ ファイルで作業する場合にパフォーマンスを向上させるには、名前と値の引数 CombineRecords を使用します。

メモ

パフォーマンスを向上させるために、ファイルを開いたときに CDF ライブラリが既定で実行するファイルの検証をオフにしてください。詳細については、cdflib.setValidate を参照してください。

すべて折りたたむ

CDF ファイルからすべてのデータを読み取ります。

data = cdfread("example_364.cdf");
whos data
  Name       Size            Bytes  Class    Attributes

  data      24x8             32608  cell               

CDF 変数 Time および Temperature からデータを読み取ります。

data = cdfread("example_364.cdf","Variables",{"Time","Temperature"});
whos data
  Name       Size            Bytes  Class    Attributes

  data      24x2              9504  cell               

CDF 変数 multidimensional の最初の次元の最初の値、2 番目の次元の 2 番目の値、3 番目の次元の最初と 3 番目の値、残りの次元のすべての値を読み取ります。

dataSlice = cdfread("example_364.cdf","Variables","multidimensional", ...
                    "Slices",[0 1 1; 1 1 1; 0 2 2]);
dataSlice
dataSlice = 1x1 cell array
    {1x1x2x4 uint8}

あるいは、すべての変数を data に読み取ってから、行列のインデックス指定を使用します。

data = cdfread("example_364.cdf","Variables","multidimensional");
dataIndex = data{1}(1,2,[1 3],:);
whos dataIndex
  Name           Size               Bytes  Class    Attributes

  dataIndex      1x1x2x4                8  uint8              

データセットから読み込んだレコードを結合して詰め込み、CDF_EPOCH および CDF_TIME_TT2000 のデータ型を MATLAB datetime 値に変換します。

data = cdfread("example_364.cdf","CombineRecords",true, ...
               "DatetimeType","datetime");
whos data
  Name      Size            Bytes  Class    Attributes

  data      1x8              7408  cell               

example_364.cdf ファイルでデータを確認します。

info = cdfinfo("example_364.cdf");
info.Variables
ans=8×6 cell array
    {'Time'            }    {[    1 1]}    {[24]}    {'epoch' }    {'T/'    }    {'Full'}
    {'Longitude'       }    {[    2 2]}    {[ 1]}    {'int8'  }    {'F/FT'  }    {'Full'}
    {'Latitude'        }    {[    2 2]}    {[ 1]}    {'int8'  }    {'F/TF'  }    {'Full'}
    {'Data'            }    {[  2 2 4]}    {[ 1]}    {'double'}    {'T/TTT' }    {'Full'}
    {'multidimensional'}    {[2 2 3 4]}    {[ 1]}    {'uint8' }    {'T/TTTT'}    {'Full'}
    {'Temperature'     }    {[    3 2]}    {[10]}    {'int16' }    {'T/TT'  }    {'Full'}
    {'multiInt8'       }    {[    2 3]}    {[ 2]}    {'int64' }    {'T/TT'  }    {'Full'}
    {'tt2000'          }    {[    1 1]}    {[ 8]}    {'tt2000'}    {'T/'    }    {'Full'}

CDF_TIME_TT2000 データを読み取ります。cdfread は、データを既定で datetime 値に変換します。

tt2000Data = cdfread("example_364.cdf","Variables","tt2000");

3 番目、4 番目、および 5 番目のデータ値を確認します。

tt2000Data{3:5}
ans = datetime
   2016-12-31T23:59:59.100200300Z

ans = datetime
   2016-12-31T23:59:60.100200300Z

ans = datetime
   2017-01-01T00:00:00.100200300Z

ネイティブ形式の CDF_TIME_TT2000 データを CDF_TIME_TT2000 タイムスタンプとして読み取ります。

tt2000Data = cdfread("example_364.cdf","Variables","tt2000", ...
                     "DatetimeType","native");

データを個々の時間成分に分解します。3 番目、4 番目、および 5 番目のタイムスタンプの成分を表示します。

timeArr = cdflib.breakdownTT2000([tt2000Data{:}]);
timeArr(:,3:5)
ans = 9×3

        2016        2016        2017
          12          12           1
          31          31           1
          23          23           0
          59          59           0
          59          60           0
         100         100         100
         200         200         200
         300         300         300

制限

  • 関数 cdfread は、ASCII エンコード以外のデータをサポートしません。CDF ファイル内のすべての変数名、属性名、変数値および属性値は、7 ビット ASCII エンコードでなければなりません。ASCII エンコード以外のデータを読み取ろうとすると、エラーまたはデータの文字化けが発生します。

バージョン履歴

R2006a より前に導入

すべて展開する