Main Content

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

HDF5 파일 가져오기

개요

NCSA(National Center for Supercomputing Application)에서 개발한 HDF5(Hierarchical Data Format Version 5)는 과학 데이터를 파일에 저장하기 위한 범용 표준으로 시스템에 상관없이 사용할 수 있습니다. HDF5는 용이한 데이터의 공유를 위해 표준화된 데이터 저장 방식을 요하는 여러 공학 및 과학 분야에서 사용됩니다. HDF5 파일 형식에 대한 자세한 내용은 The HDF Group 웹사이트(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 파일 구성 중 이 부분을 보여줍니다.

Schematic showing structure of HDF5 data in example.h5

데이터 세트에 대한 정보(예: 이름, 차원, 데이터형)를 얻으려면 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형 값으로 구성된 셀형 배열
참조참조의 값이 아니라 참조가 가리키는 실제 데이터로 구성된 셀형 배열
문자열(고정 길이와 가변 길이)string형 배열
열거형문자형 벡터로 구성된 셀형 배열(각 열거형 값은 대응하는 멤버 이름으로 바뀜)
복합형1×1 구조체형 배열(데이터 세트의 차원은 구조체의 필드에 표시됨)
배열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  

복합형 데이터형은 항상 1×1 구조체로 반환됩니다. 데이터 세트의 차원은 구조체 필드에 표시됩니다. 예를 들어, 데이터 세트 /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은 이 데이터를 1×1 구조체로 반환합니다.

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

data = 

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

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

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

동적으로 불러온 필터를 사용하여 HDF5 데이터 세트 읽기

MATLAB은 동적으로 불러온 필터를 사용하여 HDF5 데이터 세트의 읽기와 쓰기를 지원합니다. The HDF Group은 웹사이트의 Filters에 등록된 필터 목록을 유지합니다.

사용자 정의된 타사 필터를 사용하여 쓴 데이터 세트를 읽으려면 다음 단계를 따르십시오.

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

  2. 플러그인의 로컬 설치를 가리키도록 HDF5_PLUGIN_PATH 환경 변수를 설정한 후 MATLAB을 시작합니다.

    • Windows®의 경우 — 시스템 속성 > 고급 > 환경 변수를 사용하여 환경 변수를 설정한 후 MATLAB을 시작합니다.

    • Linux®Mac의 경우 — 터미널에서 환경 변수를 설정한 후 같은 터미널에서 MATLAB을 시작합니다.

이러한 단계를 완료한 후에는 하이 레벨 또는 로우 레벨 MATLAB HDF5 함수를 사용하여 타사 필터로 압축된 데이터 세트를 읽고 이에 액세스할 수 있습니다. 자세한 내용은 The HDF Group 웹사이트의 HDF5 Dynamically Loaded Filters 항목을 참조하십시오.

Linux 사용자만 해당: MATLAB HDF5 공유 라이브러리를 사용하여 필터 플러그인 재빌드하기

R2021b부터 경우에 따라, 핵심 HDF5 라이브러리 함수에 대한 콜백이 있는 필터 플러그인을 사용하는 Linux 사용자는 제품에 포함된 MATLAB HDF5 공유 라이브러리 /matlab/bin/glnxa64/libhdf5.so.x.x.x를 사용하여 플러그인을 재빌드해야 합니다. 이 버전의 공유 라이브러리를 사용하여 플러그인을 재빌드하지 않을 경우 정의되지 않은 동작부터 예기치 않은 종료에 이르는 다양한 문제가 발생할 수 있습니다. 자세한 내용은 Build HDF5 Filter Plugins on Linux Using MATLAB HDF5 Shared Library or GNU Export Map을 참조하십시오.

관련 항목