Main Content

이 페이지의 최신 내용은 아직 번역되지 않았습니다. 최신 내용은 영문으로 볼 수 있습니다.

HDF5 파일 가져오기

개요

NCSA(National Center for Supercomputing Application)에서 개발한 HDF5(Hierarchical Data Format Version 5)는 과학 데이터를 파일에 저장하기 위한 범용 표준으로 시스템에 상관없이 사용할 수 있습니다. HDF5는 용이한 데이터의 공유를 위해 표준화된 데이터 저장 방식을 요하는 여러 공학 및 과학 분야에서 사용됩니다. HDF5 파일 형식에 대한 자세한 내용은 HDF 웹 사이트(https://www.hdfgroup.org)에서 HDF5 문서를 참조하십시오.

MATLAB®은 HDF5 파일에서 데이터를 가져올 수 있는 두 가지 방법을 제공합니다.

  • 하이 레벨 함수는 숫자형 데이터셋을 사용할 때 데이터를 손쉽게 가져올 수 있도록 해줍니다.

  • 로우 레벨 함수를 사용하면 HDF5 C 라이브러리의 루틴에 액세스하여 가져오기 프로세스를 보다 완벽하게 제어할 수 있습니다.

참고

별도의 호환되지 않는 HDF4 파일 가져오기에 대한 자세한 내용은프로그래밍 방식으로 HDF4 파일 가져오기 항목을 참조하십시오.

하이 레벨 HDF5 함수를 사용하여 데이터 가져오기

MATLAB에는 HDF5 파일의 내용을 검토하고 파일 데이터를 MATLAB 작업 공간으로 가져오는 데 사용할 수 있는 몇 개의 함수가 포함되어 있습니다.

참고

숫자형 데이터셋 또는 특성 읽기는 하이엔드 함수만 가능합니다. 숫자형이 아닌 데이터셋 또는 특성을 읽으려면 로우 레벨 인터페이스를 사용해야 합니다.

  • h5disp — HDF5 파일의 내용을 확인합니다.

  • h5info — HDF5 파일을 정의하는 모든 메타데이터가 포함된 구조체를 만듭니다.

  • h5read — HDF5 파일의 변수에서 데이터를 읽습니다.

  • h5readatt — HDF5 파일의 변수와 연관된 특성 또는 파일 자체와 연관된 특성(전역 특성)에서 데이터를 읽습니다.

위 함수를 사용하는 방법에 대한 자세한 내용은 예제가 포함되어 있는 해당 함수 도움말 페이지를 참조하십시오. 다음 섹션에서는 몇 가지 일반적인 사용 시나리오를 보여줍니다.

HDF5 파일 내용 확인하기

HDF5 파일에는 특성이라는 데이터와 메타데이터가 포함될 수 있습니다. HDF5 파일은 데이터와 메타데이터를 UNIX® 파일 시스템의 계층적 구조와 유사한 계층적 구조로 구성합니다.

HDF5 파일에서는 계층 구조에 있는 디렉터리를 그룹이라고 합니다. 그룹에는 다른 그룹, 데이터 세트, 특성, 링크, 데이터형이 포함될 수 있습니다. 데이터 세트는 다차원 숫자형 배열 또는 문자열 같은 데이터 모음입니다. 특성은 다른 엔터티와 연관된 모든 데이터(예: 데이터 세트)입니다. 링크는 UNIX 파일 시스템의 기호화된 링크와 유사합니다. 링크를 사용하면 객체의 복사본을 만들지 않고도 객체를 참조할 수 있습니다.

데이터형은 데이터 세트 또는 특성의 데이터에 대한 설명입니다. 데이터형을 통해 데이터 세트의 데이터를 해석하는 방법을 알 수 있습니다.

HDF5 파일의 내용을 빠르게 확인하려면 h5disp 함수를 사용하십시오.

h5disp('example.h5')

HDF5 example.h5 
Group '/' 
    Attributes:
        'attr1':  97 98 99 100 101 102 103 104 105 0 
        'attr2':  2x2 H5T_INTEGER
    Group '/g1' 
        Group '/g1/g1.1' 
            Dataset 'dset1.1.1' 
                Size:  10x10
                MaxSize:  10x10
                Datatype:   H5T_STD_I32BE (int32)
                ChunkSize:  []
                Filters:  none
                Attributes:
                    'attr1':  49 115 116 32 97 116 116 114 105 ... 
                    'attr2':  50 110 100 32 97 116 116 114 105 ... 
            Dataset 'dset1.1.2' 
                Size:  20
                MaxSize:  20
                Datatype:   H5T_STD_I32BE (int32)
                ChunkSize:  []
                Filters:  none
        Group '/g1/g1.2' 
            Group '/g1/g1.2/g1.2.1' 
                Link 'slink'
                    Type:  soft link
    Group '/g2' 
        Dataset 'dset2.1' 
            Size:  10
            MaxSize:  10
            Datatype:   H5T_IEEE_F32BE (single)
            ChunkSize:  []
            Filters:  none
        Dataset 'dset2.2' 
            Size:  5x3
            MaxSize:  5x3
            Datatype:   H5T_IEEE_F32BE (single)
            ChunkSize:  []
            Filters:  none
					.
					.
					.

HDF5 파일의 계층적 구성을 살펴보려면 h5info 함수를 사용하십시오. h5info는 파일 이름을 비롯하여 HDF5 파일에 대한 다양한 정보가 포함된 구조체를 반환합니다.

info = h5info('example.h5')
info = 

         Filename: 'matlabroot\matlab\toolbox\matlab\demos\example.h5'
          Name: '/'
        Groups: [4x1 struct]
      Datasets: []
     Datatypes: []
         Links: []
    Attributes: [2x1 struct]

Groups 필드와 Attributes 필드를 보면 파일에 4개의 그룹과 2개의 특성이 포함되어 있음을 알 수 있습니다. Datasets 필드, Datatypes 필드, Links 필드는 모두 비어 있습니다. 이는 루트 그룹에 데이터 세트, 데이터형 또는 링크가 포함되어 있지 않음을 나타냅니다. 샘플 HDF5 파일의 내용을 더 자세히 살펴보려면 Groups의 구조체 중 하나를 검토하십시오. 다음 예제에서는 이 필드에 있는 두 번째 구조체의 내용을 보여줍니다.

level2 = info.Groups(2)

level2 = 

          Name: '/g2'
        Groups: []
      Datasets: [2x1 struct]
     Datatypes: []
         Links: []
    Attributes: []

샘플 파일에서 /g2라는 그룹에는 2개의 데이터 세트가 포함되어 있습니다. 다음 그림에서는 샘플 HDF5 파일 구성 중 이 부분을 보여줍니다.

데이터 세트에 대한 정보(예: 이름, 차원, 데이터형)를 얻으려면 Datasets 필드에 반환된 구조체 중 하나를 살펴보십시오.

dataset1 = level2.Datasets(1)

dataset1 = 
      Filename: 'matlabroot\example.h5'
          Name: '/g2/dset2.1'
          Rank: 1
      Datatype: [1x1 struct]
          Dims: 10
       MaxDims: 10
        Layout: 'contiguous'
    Attributes: []
         Links: []
     Chunksize: []
     Fillvalue: []

HDF5 파일에서 데이터 가져오기

HDF5 파일에서 데이터 또는 메타데이터를 읽어오려면 h5read 함수를 사용하십시오. 인수로는 HDF5 파일의 이름과 데이터 세트의 이름을 지정합니다. (특성 값을 읽어오려면 h5readatt를 사용해야 합니다.)

설명을 위해 다음 예제에서는 HDF5 샘플 파일 example.h5에서 데이터 세트 /g2/dset2.1을 읽어옵니다.

data = h5read('example.h5','/g2/dset2.1')

data =

    1.0000
    1.1000
    1.2000
    1.3000
    1.4000
    1.5000
    1.6000
    1.7000
    1.8000
    1.9000

HDF5 데이터형을 MATLAB 데이터형에 매핑하기

h5read 함수는 HDF5 파일의 데이터를 MATLAB 작업 공간으로 읽어올 때 아래 표에 표시된 것처럼 HDF5 데이터형을 MATLAB 데이터형에 매핑합니다.

HDF5 데이터형h5read 반환 결과
비트 필드압축 8비트 정수로 구성된 배열
부동소수점MATLAB single형과 double형(64비트 이하를 차지하는 경우)
정수형(부호 있는 정수와 부호 없는 정수)상응하는 MATLAB 정수형(부호 있는 정수와 부호 없는 정수)
불투명uint8 값으로 구성된 배열
참조참조의 값이 아니라 참조가 가리키는 실제 데이터가 반환됨
문자열(고정 길이와 가변 길이)문자형 벡터로 구성된 셀형 배열
열거형문자형 벡터로 구성된 셀형 배열(각 열거형 값은 대응하는 멤버 이름으로 바뀜)
복합형1x1 구조체형 배열(데이터셋의 차원은 구조체의 필드에 표시됨)
배열HDF5 배열과 동일한 데이터형의 값으로 구성된 배열. 예: 부호 있는 32비트 정수로 구성된 배열의 경우, MATLAB 배열의 유형은 int32임.

MATLAB에 포함된 예제 HDF5 파일에는 위의 모든 데이터형에 대한 예제가 포함되어 있습니다.

예를 들어, 데이터 세트 /g3/string은 문자열입니다.

h5disp('example.h5','/g3/string')
HDF5 example.h5 
Dataset 'string' 
    Size:  2
    MaxSize:  2
    Datatype:   H5T_STRING
        String Length: 3
        Padding: H5T_STR_NULLTERM
        Character Set: H5T_CSET_ASCII
        Character Type: H5T_C_S1
    ChunkSize:  []
    Filters:  none
    FillValue:  ''

이제 파일에서 데이터를 읽어오겠습니다. MATLAB은 이 데이터를 문자형 벡터로 구성된 셀형 배열로 반환합니다.

s = h5read('example.h5','/g3/string')

s = 

    'ab '
    'de '

>> whos s
  Name      Size            Bytes  Class    Attributes

  s         2x1               236  cell  

복합형 데이터형은 항상 1x1 구조체로 반환됩니다. 데이터 세트의 차원은 구조체 필드에 표시됩니다. 예를 들어, 데이터 세트 /g3/compound2D는 복합형 데이터형입니다.

h5disp('example.h5','/g3/compound2D')
HDF5 example.h5 
Dataset 'compound2D' 
    Size:  2x3
    MaxSize:  2x3
    Datatype:   H5T_COMPOUND
        Member 'a':  H5T_STD_I8LE (int8)
        Member 'b':  H5T_IEEE_F64LE (double)
    ChunkSize:  []
    Filters:  none
    FillValue:  H5T_COMPOUND

이제 파일에서 데이터를 읽어오겠습니다. MATLAB은 이 데이터를 1x1 구조체로 반환합니다.

data = h5read('example.h5','/g3/compound2D')

data = 

    a: [2x3 int8]
    b: [2x3 double]

동적으로 불러온 필터를 사용하여 HDF5 데이터셋 읽어오기

R2015a 이상 릴리스에서 MATLAB은 타사 필터를 사용하여 작성된 HDF5 데이터셋을 읽을 수 있도록 지원합니다. 동적으로 불러온 필터 기능을 사용하여 데이터셋을 읽어오려면 다음 작업을 수행하십시오.

  • 시스템에 HDF5 필터 플러그인을 공유 라이브러리 또는 DLL로 설치합니다.

  • 설치 위치를 가리키도록 HDF5_PLUGIN_PATH 환경 변수를 설정합니다.

자세한 내용은 동적으로 불러온 HDF5 필터 항목을 참조하십시오.

참고

동적으로 불러온 필터를 사용하여 HDF5 데이터셋을 쓰는 기능은 지원되지 않습니다.

로우 레벨 HDF5 함수를 사용하여 데이터 가져오기

MATLAB은 HDF5 라이브러리의 함수에 대응하는 로우 레벨 함수를 사용하여 HDF5 라이브러리의 수십 가지 함수에 직접 액세스할 수 있도록 합니다. 이 방법을 통해 사용자는 MATLAB에서 복소수 데이터형 읽기와 쓰기, HDF5 서브셋 설정 기능 사용 같은 HDF5 라이브러리의 기능에 액세스할 수 있습니다. 자세한 내용은 MATLAB 로우 레벨 HDF5 함수를 사용하여 데이터 내보내기 항목을 참조하십시오.