Main Content

이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.

NetCDF 파일로 내보내기

하이 레벨 함수 및 netcdf 패키지의 로우 레벨 함수를 사용하여 NetCDF 파일을 만들고 병합하고 작성합니다.

MATLAB NetCDF 지원 기능

NetCDF(Network Common Data Form)는 배열 지향적인 과학 데이터를 생성, 액세스 및 공유하도록 지원하는 소프트웨어 라이브러리 및 시스템 독립적인 데이터 형식의 집합입니다. NetCDF는 용이한 데이터의 공유를 위해 표준화된 데이터 저장 방식을 요하는 여러 공학 및 과학 분야에서 사용됩니다.

MATLAB® 하이 레벨 함수를 사용하면 데이터를 NetCDF 파일로 쉽게 내보낼 수 있습니다. MATLAB 로우 레벨 함수를 사용하면 NetCDF C 라이브러리의 루틴에 액세스할 수 있습니다. 로우 레벨 함수를 효과적으로 사용하려면 NetCDF C 인터페이스를 잘 알고 있어야 합니다. NetCDF 문서는 Unidata 웹 사이트에서 참조할 수 있습니다.

참고

호환되지 않는 별개의 형식을 가지고 있는 CDF(Common Data Format) 파일로 내보내는 방법에 대한 자세한 내용은 CDF 파일로 내보내기 항목을 참조하십시오.

기존 파일 또는 템플릿에서 NetCDF 파일 새로 만들기

이 예제에서는 기존 파일의 변수, 차원 및 그룹 정의를 포함하되 다른 형식을 사용하는 NetCDF 파일을 새로 만드는 방법을 보여줍니다.

nccreate 함수를 사용하여 하나의 변수를 포함하는 파일을 만듭니다.

nccreate('myfile.nc','myvar')

데이터를 파일에 씁니다.

A = 99;
ncwrite('myfile.nc','myvar',A)

ncinfo를 사용하여 파일에서 변수, 차원 및 그룹 정의를 읽어옵니다. 이 정보는 파일의 스키마를 정의합니다.

S = ncinfo('myfile.nc');

파일의 형식을 확인합니다.

file_fmt = S.Format
file_fmt = 
'netcdf4_classic'

구조체 S에서 Format 필드의 값을 지원되는 다른 NetCDF 형식으로 변경합니다.

S.Format = 'netcdf4';

ncwriteschema 함수를 사용하여 새 형식을 사용하는 파일의 새 버전을 만듭니다. 스키마는 파일의 구조를 정의하지만, 원래 파일에 있던 데이터는 포함하지 않습니다.

ncwriteschema('newfile.nc',S)
S = ncinfo('newfile.nc');

참고: ncwriteschema를 사용하여 파일의 형식을 변환할 때 원래 파일 형식에 새 형식에서는 지원되지 않는 필드가 포함되어 있는 경우 경고 메시지가 표시될 수 있습니다. 예를 들어, netcdf4 형식은 채우기 값을 지원하지만 NetCDF classic 형식은 그렇지 않습니다. 이러한 경우, ncwriteschema는 여전히 파일을 만들지만 새 형식에서 정의되지 않는 필드를 제외합니다.

새 파일의 형식을 확인합니다.

new_fmt = S.Format
new_fmt = 
'netcdf4'

새 파일 newfile.ncmyfile.nc의 변수 정의와 차원 정의를 포함하지만, 데이터를 포함하지는 않습니다.

데이터를 새 파일에 씁니다.

ncwrite('newfile.nc','myvar',A)

두 개의 NetCDF 파일 병합하기

이 예제에서는 하이 레벨 함수를 사용하여 두 개의 NetCDF 파일을 병합하는 방법을 보여줍니다. 결합된 파일은 원래 파일의 변수 정의와 차원 정의를 포함하지만, 이러한 원래 파일의 데이터를 포함하지는 않습니다.

ex1.nc라는 NetCDF 파일을 만들고 myvar이라는 이름의 변수를 정의합니다. 그런 다음, 데이터를 변수에 쓰고 파일 내용을 표시합니다.

nccreate('ex1.nc','myvar');
ncwrite('ex1.nc','myvar',55)
ncdisp('ex1.nc')
Source:
           pwd\ex1.nc
Format:
           netcdf4_classic
Variables:
    myvar
           Size:       1x1
           Dimensions: 
           Datatype:   double

두 번째 파일을 만들고 myvar2라는 이름의 변수를 정의합니다. 그런 다음, 데이터를 변수에 쓰고 파일 내용을 표시합니다.

nccreate('ex2.nc','myvar2');
ncwrite('ex2.nc','myvar2',99)
ncdisp('ex2.nc')
Source:
           pwd\ex2.nc
Format:
           netcdf4_classic
Variables:
    myvar2
           Size:       1x1
           Dimensions: 
           Datatype:   double

ncinfo 함수를 사용하여 각 파일의 스키마를 가져옵니다.

info1 = ncinfo('ex1.nc')
info1 = 

      Filename: 'pwd\ex1.nc'
          Name: '/'
    Dimensions: []
     Variables: [1x1 struct]
    Attributes: []
        Groups: []
        Format: 'netcdf4_classic'
info2 = ncinfo('ex2.nc')
info2 = 

      Filename: 'pwd\ex2.nc'
          Name: '/'
    Dimensions: []
     Variables: [1x1 struct]
    Attributes: []
        Groups: []
        Format: 'netcdf4_classic'

ncwriteschema 함수를 사용하여 첫 번째 예제 파일의 스키마를 사용하는 NetCDF 파일을 새로 만듭니다. 그런 다음, 파일 내용을 표시합니다.

ncwriteschema('combined.nc',info1)
ncdisp('combined.nc')
Source:
           pwd\combined.nc
Format:
           netcdf4_classic
Variables:
    myvar
           Size:       1x1
           Dimensions: 
           Datatype:   double
           Attributes:
                       _FillValue = 9.969209968386869e+36

ncwriteschema를 사용하여 ex2.nc의 스키마를 combined.nc에 추가합니다.

ncwriteschema('combined.nc',info2)

결합된 파일의 내용을 확인합니다.

ncdisp('combined.nc')
Source:
           pwd\combined.nc
Format:
           netcdf4_classic
Variables:
    myvar 
           Size:       1x1
           Dimensions: 
           Datatype:   double
           Attributes:
                       _FillValue = 9.969209968386869e+36
    myvar2
           Size:       1x1
           Dimensions: 
           Datatype:   double
           Attributes:
                       _FillValue = 9.969209968386869e+36

이 파일은 첫 번째 예제 파일에 정의된 myvar 변수와 두 번째 파일에 정의된 myvar2 변수를 포함합니다.

로우 레벨 함수를 사용하여 데이터를 NetCDF 파일에 쓰기

이 예제에서는 로우 레벨 함수를 사용하여 데이터를 NetCDF 파일에 쓰는 방법을 보여줍니다. MATLAB® 로우 레벨 함수를 사용하면 NetCDF C 라이브러리의 루틴에 액세스할 수 있습니다. MATLAB은 netcdf라는 패키지로 함수를 그룹화합니다. 패키지에 포함된 함수 중 하나를 호출하려면 패키지 이름을 함수 이름 앞에 추가해야 합니다.

MATLAB NetCDF 함수를 효과적으로 사용하려면 NetCDF C 인터페이스에 대한 정보를 잘 알고 있어야 합니다.

이 예제를 실행하려면 현재 폴더에 대한 쓰기 권한이 있어야 합니다.

MATLAB 작업 공간에서 이름이 my_data이고 숫자형 값으로 구성된 1×50 변수를 만듭니다. 벡터는 double형 클래스입니다.

my_data = linspace(0,49,50);

netcdf.create 함수를 사용하여 NetCDF 파일 my_file.nc를 만듭니다. NOCLOBBER 파라미터는 NetCDF 파일 액세스 상수이며, 동일한 이름을 갖는 기존 파일을 덮어쓰지 않음을 나타냅니다.

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

netcdf.create는 파일 ID ncid를 반환합니다. NetCDF 파일을 만들면 정의 모드에서 파일이 열립니다. 차원 및 변수를 정의하려면 정의 모드에 있어야 합니다.

netcdf.defDim 함수를 사용하여 파일에 차원을 정의합니다. 이 함수는 NetCDF 라이브러리 C API의 nc_def_dim 함수에 대응합니다. 파일에 차원을 정의해야 변수를 정의하고 데이터를 파일에 쓸 수 있습니다. 여기서는 길이가 50인 my_dim이라는 차원을 정의합니다.

dimid = netcdf.defDim(ncid,'my_dim',50)
dimid = 0

netcdf.defDim은 새 차원에 대응하는 차원 식별자를 반환합니다. 식별자는 0부터 시작하는 인덱스입니다.

netcdf.defVar 함수를 사용하여 차원에 대해 my_var이라는 변수를 정의합니다. 이 함수는 NetCDF 라이브러리 C API의 nc_def_var 함수에 대응합니다. 변수의 NetCDF 데이터형을 지정합니다. 여기서는 NC_BYTE로 지정하겠습니다.

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

netcdf.defVarmy_var에 대응하는 변수 식별자를 반환합니다.

NetCDF 파일을 정의 모드에서 해제합니다. 데이터를 파일에 쓰려면 데이터 모드에 있어야 합니다.

netcdf.endDef(ncid)

netcdf.putVar 함수를 사용하여 MATLAB 작업 공간의 데이터를 NetCDF 파일의 변수에 씁니다. 작업 공간의 데이터는 double형 클래스이지만, NetCDF 파일의 변수는 NC_BYTE형입니다. MATLAB NetCDF 함수는 자동으로 변환을 수행합니다.

netcdf.putVar(ncid,varid,my_data)

netcdf.close 함수를 사용하여 파일을 닫습니다.

netcdf.close(ncid)

파일을 열고 변수의 데이터를 MATLAB 작업 공간에서 새 변수로 읽어와서 데이터가 파일에 쓰여졌는지 확인합니다.

ncid2 = netcdf.open('my_file.nc','NC_NOWRITE');
x = netcdf.getVar(ncid2,0);

x의 데이터형을 확인합니다.

whos x
  Name       Size            Bytes  Class    Attributes

  x         50x1                50  int8               

MATLAB은 열 우선 순서로 데이터를 저장하는 반면, NetCDF C API는 행 우선 순서를 사용합니다. MATLAB 작업 공간의 원래 벡터 my_data는 1×50이었지만, x는 NetCDF 파일에 저장된 데이터를 나타내므로 50×1입니다. NetCDF 파일에 데이터를 NC_BYTE형으로 저장했기 때문에 MATLAB은 변수의 데이터를 int8형 클래스로 작업 공간으로 읽어옵니다.

파일을 닫습니다.

netcdf.close(ncid2)

관련 항목

외부 웹사이트