ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

NetCDF ファイルへのエクスポート

概要

Network Common Data Form (NetCDF) は一連のソフトウェア ライブラリとハードウェア非依存型のデータ形式であり、配列指向の科学的データの作成、アクセスおよび共有をサポートしています。NetCDF は、データ共有を目的とする標準のデータ保存方法が必要な工学および科学の諸分野で幅広く使用されています。詳細は、Unidata の Web サイトで入手できる NetCDF ドキュメンテーションを参照してください。

MATLAB® には、ワークスペースから NetCDF ファイルにデータをエクスポートする 2 つの方法が用意されています。

  • データを簡単にエクスポートできる高水準関数

  • NetCDF C ライブラリのルーチンにアクセスできる低水準関数

    メモ:   形式に互換性がなく、まったく異なる Common Data Format (CDF) ファイルへのエクスポートの詳細は、「NetCDF ファイルへのエクスポート」を参照してください。

高水準 NetCDF 関数を使用したデータのエクスポート

MATLAB には、ファイルから MATLAB ワークスペースへのデータのエクスポートに使用できるいくつかの関数が備わっています。

  • nccreate — NetCDF ファイルに変数を作成します。ファイルが存在しない場合は nccreate によって作成されます。

  • ncwrite — NetCDF ファイルにデータを書き込みます。

  • ncwriteatt — NetCDF ファイルの変数と関連付けられている属性、またはファイル自体と関連付けられている属性 (グローバル属性) にデータを書き込みます。

  • ncwriteschema — NetCDF スキーマを NetCDF ファイルに追加するか、またはこのスキーマをテンプレートとして使用して新しいファイルを作成します。

これらの関数の使用方法の詳細は、各リファレンス ページを参照してください。各ページには例が記載されています。NetCDF ファイルからのデータ インポート (読み取り) の詳細は、「MATLAB の高水準 NetCDF 関数を使用したデータのインポート」を参照してください。以下に挙げる例では、これらの関数を使用していくつかの一般的シナリオを実行する方法を示します。

既存のファイルまたはテンプレートからの新規 NetCDF ファイルの作成

この例では、既存のファイル (またはテンプレート) を基に新しいファイルを作成する方法を説明します。

  1. ncinfo を使用して、ファイルから変数、次元、およびグループの定義を読み取ります。この情報によってファイルの "スキーマ" が定義されます。

    finfo = ncinfo('example.nc');
  2. ncwriteschema を使用して、このスキーマを使用する新しい NetCDF ファイルを作成します。

    ncwriteschema('mynewfile.nc',finfo);
  3. ncdisp を使用して、既存のファイルと新しいファイルを表示します。新しいファイルに、既存のファイルと同じ次元、変数、グループのセットが含まれていることがわかります。

      メモ:    スキーマによってファイルの構造が定義されますが、元のファイルにあったデータは一切含まれていません。

    ncdisp('example.nc')
    ncdisp('mynewfile.nc')

NetCDF ファイル形式間の変換

この例では、既存のファイルを 1 つの形式から別の形式に変換する方法を示します。

    メモ:    ncwriteschema を使用してファイルの形式を変換する際、新しい形式でサポートされていないフィールドが変換元のファイル形式に含まれている場合は、警告メッセージが表示されることがあります。たとえば、netcdf4 では埋め込み値がサポートされますが、従来の NetCDF 形式ではサポートされません。こうした場合でも ncwriteschema によりファイルは作成されますが、新しい形式で定義できないフィールドは除外されます。

  1. 関数 nccreate を使用して、1 つの変数を含む新しいファイルを作成します。

    nccreate('ex1.nc','myvar');
  2. ncinfo を使用して新しいファイルの形式を決定します。

    finfo = ncinfo('ex1.nc');
    file_fmt = finfo.Format
    
    file_fmt =
    
    netcdf4_classic
  3. finfo 構造体の Format フィールドの値を、サポートされる別の NetCDF 形式に変更します。finfo 構造体を使用して新しい形式を指定します。

    finfo.Format = 'netcdf4';
  4. 関数 ncwriteschema を使用して、新しい形式を使用するファイルの新バージョンを作成します。

    finfo = ncwriteschema('newfile.nc',finfo);
    finfo = ncinfo('newfile.nc');
    new_fmt = finfo.Format
    
    file_fmt =
    
    netcdf4

      メモ:    新しいファイルには元のファイルの変数と次元の定義が含まれますが、データは含まれません。データはファイルに書き込まなくてはなりません。

2 つの NetCDF ファイルの結合

この例では 2 つの NetCDF ファイルを結合する方法を示します。

    メモ:    結合したファイルには結合元のファイルの変数と次元の定義が含まれますが、元のファイルのデータは含まれていません。

  1. ファイルを作成してからそのファイル内で変数を定義し、データを変数に書き込みます。

    nccreate('ex1.nc','myvar');
    ncwrite('ex1.nc','myvar',55)
    ncdisp('ex1.nc')
    
  2. 2 つ目のファイルを別の変数とともに作成し、データをそこに書き込みます。

    nccreate('ex2.nc','myvar2');
    ncwrite('ex2.nc','myvar2',99)
    ncdisp('ex2.nc')
    
  3. ncinfo を使用して、新たに作成された各ファイルのスキーマを取得します。

    finfo1 = ncinfo('ex1.nc')
    
    finfo1 = 
    
          Filename: 'H:\file1.nc'
              Name: '/'
        Dimensions: []
         Variables: [1x1 struct]
        Attributes: []
            Groups: []
            Format: 'netcdf4_classic'
    
    finfo2 = ncinfo('file2.nc')
    
    finfo2 = 
    
          Filename: 'H:\file2.nc'
              Name: '/'
        Dimensions: []
         Variables: [1x1 struct]
        Attributes: []
            Groups: []
            Format: 'netcdf4_classic'
  4. ncwriteschema を使用して、最初のサンプル ファイルのスキーマを使用する新しい NetCDF ファイルを作成します。

    ncwriteschema('combined_file.nc',finfo1);
    
    ncdisp('combined_file.nc')
    Source:
               H:\combined_file.nc
    Format:
               netcdf4_classic
    Variables:
        myvar1
               Size:       1x1
               Dimensions: 
               Datatype:   double
               Attributes:
                           _FillValue = 9.97e+036
    
  5. ncwriteschema を使用して、新たに作成したファイルに 2 つ目のサンプル ファイルのスキーマを加えます。内容を表示すると、最初のサンプル ファイルで定義された変数と 2 つ目のファイルで定義された変数がファイルに含まれていることがわかります。

    ncwriteschema('combined_file.nc',finfo2);
    
    ncdisp('combined_file.nc')
    Source:
               H:\combined_file.nc
    Format:
               netcdf4_classic
    Variables:
        myvar1
               Size:       1x1
               Dimensions: 
               Datatype:   double
               Attributes:
                           _FillValue = 9.97e+036
        myvar2
               Size:       1x1
               Dimensions: 
               Datatype:   double
               Attributes:
                           _FillValue = 9.97e+036

NetCDF 低水準関数を使用したデータのエクスポート

MATLAB では NetCDF C ライブラリのルーチンにアクセスでき、これを使用して NetCDF ファイルからのデータの読み取りや NetCDF ファイルへのデータの書き込みができます。MATLAB からのアクセスには、NetCDF C ライブラリの関数に対応する一連の MATLAB 関数を使用します。これらの関数は MATLAB により netcdf という名前のパッケージにまとめられています。パッケージ内のいずれかの関数を呼び出すには、パッケージ名を指定しなければなりません。すべての関数の一覧は、netcdf を参照してください。

この節では、NetCDF ライブラリのすべての機能の説明や、基本的な NetCDF プログラミングの概念の説明は行いません。MATLAB NetCDF 関数を効果的に使用するには、『NetCDF C Interface Guide』に記載されている NetCDF に関する情報を理解している必要があります。

NetCDF ファイルへのデータのエクスポート (書き込み)

NetCDF ファイルにデータを保存するために、MATLAB の NetCDF 関数を使用してファイルを作成してからファイル内の次元を定義し、ファイル内に変数を作成して、その変数にデータを書き込むことができます。変数を作成するには、まずファイル内の次元を定義しなければならないことに注意してください。以下の例を実行するには、現在のフォルダーへの書き込み権限が必要となります。

  1. MATLAB ワークスペースに変数を作成します。この例では、my_data という名前の 50 要素の数値ベクトルを作成します。このベクトルはクラス double です。

    my_data = linspace(0,49,50);
    
  2. NetCDF ファイルを作成します (または、既存のファイルを開きます)。この例では、関数 netcdf.create を使用して my_file.nc という名前の新しいファイルを作成します。NOCLOBBER パラメーターは NetCDF ファイル アクセス定数であり、これによって同名の既存のファイルを上書きしないよう指示が出されます。これらのファイル アクセス定数の詳細は、netcdf.create を参照してください。

    ncid = netcdf.create('my_file.nc','NOCLOBBER');
    

    NetCDF ファイルを作成すると、ファイルは定義モードで開きます。次元と変数を定義するには定義モードにしなければなりません。

  3. 関数 netcdf.defDim を使用してファイル内の次元を定義します。変数を定義してファイルにデータを書き込むには、まずファイル内の次元を定義しなければなりません。次元を定義するときには、名前と長さを設定します。制限のない次元、つまり拡張可能な次元をを作成するには、次元の長さの代わりに定数 NC_UNLIMITED を指定します。

    dimid = netcdf.defDim(ncid,'my_dim',50);
    
  4. 関数 netcdf.defVar を使用して、その次元における変数を定義します。変数を定義するときには、名前、データ型、および次元 ID を設定します。

    varid = netcdf.defVar(ncid,'my_var','NC_BYTE',dimid);
    

    次の表に挙げる NetCDF 定数のいずれかを使用して、データ型を指定しなければなりません。

    MATLAB クラスNetCDF データ型
    int8NC_BYTE[a]
    uint8NC_BYTE[b]
    charNC_CHAR
    int16NC_SHORT
    uint16等価はなし
    int32NC_INT
    uint32等価はなし
    int64等価はなし
    uint64等価はなし
    singleNC_FLOAT
    doubleNC_DOUBLE

    [a] NetCDF interprets byte data as either signed or unsigned.

    [b] NetCDF interprets byte data as either signed or unsigned.

  5. NetCDF ファイルの定義モードを終了します。ファイルにデータを書き込むには、データ モードにしなければなりません。

    netcdf.endDef(ncid);
    
  6. 関数 netcdf.putVar を使用して、MATLAB ワークスペースのデータを NetCDF ファイルの変数に書き込みます。ワークスペースのデータはクラス double ですが、NetCDF ファイルの変数は NC_BYTE 型であることに注意してください。MATLAB NetCDF 関数によって自動的に変換が行われます。

    netcdf.putVar(ncid,varid,my_data);
    
  7. 関数 netcdf.close を使用してファイルを閉じます。

    netcdf.close(ncid);
    
  8. ファイルを開き、変数のデータを MATLAB ワークスペースの新しい変数に読み取って、データが書き込まれたことを確認します。この変数はファイルの最初 (かつ唯一) の変数であるため、変数 ID として 0 (ゼロ) を指定できます。識別子はゼロを起点としたインデックスです。

    ncid2 = netcdf.open('my_file.nc','NC_NOWRITE');
    
    data_in_file = netcdf.getVar(ncid2,0)
    
    data_in_file =
    
        0
        1
        2
        3
        4
        5
        6
        7
        8
        9
        .
        .
        .
    

    ファイルにデータを NC_BYTE として保存したので、MATLAB ではクラス int8 として変数のデータをワークスペースに読み取ります。

この情報は役に立ちましたか?