Main Content

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

NetCDF ファイルと OPeNDAP データのインポート

高水準関数を使用して NetCDF ファイルからデータを読み取り、次に netcdf パッケージの低水準関数を使用してファイルを読み取ります。

MATLAB NetCDF 機能

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

MATLAB® の高水準関数により、NetCDF ファイルまたは OPeNDAP NetCDF データ ソースからのデータのインポート処理が簡略化されます。MATLAB の低水準関数では、NetCDF C ライブラリ内のルーチンにアクセスして、インポート処理をさらに制御できます。低水準関数を効果的に使用するには、NetCDF C インターフェイスに関する知識が必要です。NetCDF ドキュメンテーションは、Unidata Web サイトで入手できます。

メモ:

互換性のない異なる形式の Common Data Format (CDF) ファイルのインポートの詳細は、低水準関数による CDF ファイルのインポートを参照してください。

高水準関数による NetCDF ファイルからの読み取り

この例では、高水準関数を使用して NetCDF ファイルの内容を表示し、読み取る方法を説明します。

サンプルの NetCDF ファイル example.nc の内容を表示します。

ncdisp('example.nc')
Source:
           \\matlabroot\toolbox\matlab\demos\example.nc
Format:
           netcdf4
Global Attributes:
           creation_date = '29-Mar-2010'
Dimensions:
           x = 50
           y = 50
           z = 5
Variables:
    avagadros_number
           Size:       1x1
           Dimensions: 
           Datatype:   double
           Attributes:
                       description = 'this variable has no dimensions'
    temperature     
           Size:       50x1
           Dimensions: x
           Datatype:   int16
           Attributes:
                       scale_factor = 1.8
                       add_offset   = 32
                       units        = 'degrees_fahrenheight'
    peaks           
           Size:       50x50
           Dimensions: x,y
           Datatype:   int16
           Attributes:
                       description = 'z = peaks(50);'
Groups:
    /grid1/
        Attributes:
                   description = 'This is a group attribute.'
        Dimensions:
                   x    = 360
                   y    = 180
                   time = 0     (UNLIMITED)
        Variables:
            temp
                   Size:       []
                   Dimensions: x,y,time
                   Datatype:   int16
    
    /grid2/
        Attributes:
                   description = 'This is another group attribute.'
        Dimensions:
                   x    = 360
                   y    = 180
                   time = 0     (UNLIMITED)
        Variables:
            temp
                   Size:       []
                   Dimensions: x,y,time
                   Datatype:   int16

ncdisp は、ファイルのすべてのグループ、次元および変数定義を表示します。制限のない次元は UNLIMITED というラベルで識別されます。

変数 peaks からデータを読み取ります。

peaksData  = ncread('example.nc','peaks');

peaksData 出力に関する情報を表示します。

whos peaksData
  Name            Size            Bytes  Class    Attributes

  peaksData      50x50             5000  int16  

変数に関連付けられている description 属性を読み取ります。

peaksDesc  = ncreadatt('example.nc','peaks','description')
peaksDesc =

z = peaks(50);

変数データの 3 次元表面プロットを作成します。description 属性の値を Figure のタイトルとして使用します。

surf(double(peaksData))
title(peaksDesc);

/grid1/ グループに関連付けられている description 属性を読み取ります。関数 ncreadatt の 2 番目の入力としてグループ名を指定します。

g = ncreadatt('example.nc','/grid1/','description')
g =

This is a group attribute.

グローバル属性 creation_date を読み取ります。グローバル属性の場合は、ncreadatt の 2 番目の入力引数を '/' として指定します。

creation_date = ncreadatt('example.nc','/','creation_date')
creation_date =

29-Mar-2010

NetCDF ファイルのすべての制限のない次元の検索

この例では、高水準関数を使用して、NetCDF ファイルに含まれる 1 つのグループ内の制限のない次元をすべて検索する方法を説明します。

関数 ncinfo を使用して、サンプル ファイル example.nc/grid2/ グループに関する情報を取得します。

ginfo = ncinfo('example.nc','/grid2/')
ginfo = 

      Filename: '\\matlabroot\toolbox\matlab\demos\example.nc'
          Name: 'grid2'
    Dimensions: [1x3 struct]
     Variables: [1x1 struct]
    Attributes: [1x1 struct]
        Groups: []
        Format: 'netcdf4'

ncinfo は、グループに関する情報を含む構造体配列を返します。

このグループの制限のない次元を示すブール値のベクトルを取得します。

unlimDims = [ginfo.Dimensions.Unlimited]
unlimDims =

     0     0     1

unlimDims ベクトルを使用して、制限のない次元を表示します。

disp(ginfo.Dimensions(unlimDims))
         Name: 'time'
       Length: 0
    Unlimited: 1

低水準関数による NetCDF ファイルからの読み取り

この例では、netcdf パッケージの MATLAB 低水準関数を使用して、NetCDF ファイルの次元、変数および属性に関する情報を取得する方法を説明します。これらの関数を効果的に使用するには、NetCDF C インターフェイスに関する知識が必要です。

NetCDF ファイルを開く

関数 netcdf.open を使用して、サンプルの NetCDF ファイル example.nc を読み取り専用アクセスで開きます。

ncid = netcdf.open('example.nc','NC_NOWRITE')
ncid = 65536

netcdf.open はファイル識別子を返します。

NetCDF ファイルの情報の取得

関数 netcdf.inq を使用して、ファイルの内容に関する情報を取得します。この関数は、NetCDF ライブラリ C API の関数 nc_inq に相当します。

[ndims,nvars,natts,unlimdimID] = netcdf.inq(ncid)
ndims = 3
nvars = 3
natts = 1
unlimdimID = -1

netcdf.inq では、ファイルの次元、変数およびグローバル属性の数と、ファイルに含まれる制限のない次元の識別子が返されます。制限のない次元は増大の可能性があります。

関数 netcdf.inqAttName を使用してファイルのグローバル属性の名前を取得します。この関数は、NetCDF ライブラリ C API の関数 nc_inq_attname に相当します。属性名を取得するには、その属性が関連付けられている変数の ID と属性番号を指定しなければなりません。特定の変数に関連付けられていないグローバル属性にアクセスするには、定数 'NC_GLOBAL' を変数 ID として使用します。

global_att_name = netcdf.inqAttName(ncid,...
    netcdf.getConstant('NC_GLOBAL'),0)
global_att_name = 
'creation_date'

関数 netcdf.inqAtt を使用して、属性のデータ型と長さに関する情報を取得します。この関数は、NetCDF ライブラリ C API の関数 nc_inq_att に相当します。この場合も、netcdf.getConstant('NC_GLOBAL') を使用して変数 ID を指定します。

[xtype,attlen] = netcdf.inqAtt(ncid,...
    netcdf.getConstant('NC_GLOBAL'),global_att_name)
xtype = 2
attlen = 11

関数 netcdf.getAtt を使用して属性の値を取得します。

global_att_value = netcdf.getAtt(ncid,...
    netcdf.getConstant('NC_GLOBAL'),global_att_name)
global_att_value = 
'29-Mar-2010'

関数 netcdf.inqDim を使用して、ファイルの最初の次元に関する情報を取得します。この関数は、NetCDF ライブラリ C API の関数 nc_inq_dim に相当します。関数 netcdf.inqDim の 2 番目の入力は次元 ID であり、次元を識別するための 0 ベースのインデックスです。最初の次元のインデックス値は 0 です。

[dimname,dimlen] = netcdf.inqDim(ncid,0)
dimname = 
'x'
dimlen = 50

netcdf.inqDim は、次元の名前と長さを返します。

関数 netcdf.inqVar を使用してファイルの最初の変数に関する情報を取得します。この関数は、NetCDF ライブラリ C API の関数 nc_inq_var に相当します。関数 netcdf.inqVar の 2 番目の入力は変数 ID であり、変数を識別するための 0 ベースのインデックスです。最初の変数のインデックス値は 0 です。

[varname,vartype,dimids,natts] = netcdf.inqVar(ncid,0)
varname = 
'avagadros_number'
vartype = 6
dimids =

     []
natts = 1

netcdf.inqVar によって、変数の名前、データ型、次元 ID および変数に関連付けられている属性の数が返されます。vartype で返されるデータ型の情報は、NC_INTNC_BYTE などの NetCDF データ型定数の数値です。これらの定数の詳細は、NetCDF ドキュメンテーションを参照してください。

NetCDF ファイルからのデータの読み取り

関数 netcdf.getVar を使用して、サンプル ファイル内の変数 avagadros_number に関連付けられたデータを読み取ります。関数 netcdf.getVar の 2 番目の入力は変数 ID であり、変数を識別するための 0 ベースのインデックスです。変数 avagadros_number のインデックス値は 0 です。

A_number = netcdf.getVar(ncid,0)
A_number = 6.0221e+23

A_number のデータ型を表示します。

whos A_number
  Name          Size            Bytes  Class     Attributes

  A_number      1x1                 8  double              

netcdf パッケージの関数では、NetCDF データ型に最も一致する MATLAB クラスが自動的に選択されますが、netcdf.getVar でオプションの引数を使用して、返されるデータのクラスを指定することもできます。

avagadros_number に関連付けられたデータを読み取り、データを single クラスとして返します。

A_number = netcdf.getVar(ncid,0,'single');
whos A_number
  Name          Size            Bytes  Class     Attributes

  A_number      1x1                 4  single              

NetCDF ファイルを閉じる

NetCDF ファイル example.nc を閉じます。

netcdf.close(ncid)

参考

| | |

関連するトピック

外部の Web サイト