Main Content

hdfread

HDF4 또는 HDF-EOS2 파일에서 데이터 읽어 들이기

구문

data = hdfread(filename, datasetname)
data = hdfread(hinfo)
data = hdfread(...,param,value,...)
data = hdfread(filename,EOSname,param,value,...)
[data,map] = hdfread(...)

설명

data = hdfread(filename, datasetname)filename으로 지정된 HDF4 또는 HDF-EOS2 파일에서 datasetname으로 지정된 데이터 세트의 모든 데이터를 반환합니다. HDF4 파일의 데이터 세트 이름을 확인하려면 hdfinfo 함수를 사용하십시오.

참고

hdfread는 HDF4 파일이나 HDF-EOS2 파일에 사용할 수 있습니다. HDF5 파일에서 데이터를 읽으려면 h5read를 사용해야 합니다.

data = hdfread(hinfo)hdfinfo 함수가 반환한 구조체 hinfo로 지정된 데이터 세트의 모든 데이터를 반환합니다. 데이터 세트의 특정 형식과 연계되는 hinfo 구조체의 필드를 지정하고, 두 개 이상이 존재할 경우 어떤 데이터 세트인지를 지정하는 인덱스를 사용합니다. 자세한 내용은 읽어 들일 데이터 세트 지정하기 항목을 참조하십시오.

data = hdfread(...,param,value,...)는 지정된 파라미터/값 쌍에 따라 데이터의 서브셋을 반환합니다. 다양한 데이터 세트 유형에 대해 유효한 파라미터 및 값을 찾으려면 아래의 표를 참조하십시오.

data = hdfread(filename,EOSname,param,value,...)EOSname으로 지정된 HDF-EOS 점, 그리드, 주사(Swath)에서 데이터 필드의 서브셋을 읽어옵니다.

[data,map] = hdfread(...)는 8비트 래스터 이미지의 이미지 data와 컬러맵 map을 반환합니다.

서브셋 설정 파라미터

다음 표는 특정 유형의 HDF4 데이터에 대한 hdfread 함수와 함께 사용될 수 있는 서브셋 설정 파라미터를 보여줍니다. 데이터형은 다음과 같습니다.

다음 사항에 주의하십시오.

  • 파라미터가 여러 개의 값을 필요로 하는 경우 값의 저장을 위해 셀형 배열을 사용합니다. 예를 들어, 'Index' 파라미터는 세 개의 값 start, stride, edge를 필요로 합니다. 셀형 배열에서 이들 값을 중괄호로 묶어야 합니다.

    hdfread(..., 'Index', {start,stride,edge})
  • 인덱스로 지정된 모든 값은 1부터 시작됩니다.


HDF 과학 데이터(SD) 데이터 세트에 대한 서브셋 설정 파라미터

HDF SD 파일로 작업을 할 경우 hdfread는 아래 표에 나와 있는 파라미터를 지원합니다.

파라미터

설명

'Index'

요소를 3개 가진 셀형 배열 {start,stride,edge}. 데이터 세트에서 읽어 들일 위치, 범위, 값을 지정합니다.

  • start — 파일에서 읽어 들이기 시작할 위치를 지정하는 배열(1부터 시작)

    디폴트: 1. 각 차원의 첫 번째 요소에서 시작합니다. 지정된 값은 데이터 세트의 모든 차원 크기를 초과해서는 안됩니다.

  • stride — 읽어 들일 값 사이의 간격을 지정하는 배열(1부터 시작)

    디폴트: 1. 데이터 세트의 모든 요소를 읽어 들입니다.

  • edge — 읽어 들일 각 차원의 길이를 지정하는 배열(1부터 시작)

    디폴트: 해당 차원의 길이를 갖는 배열

예를 들어, 아래 코드는 HDF 파일 example.hdf에서 데이터 세트 Example SDS을 읽어 들입니다. 'Index' 파라미터는 hdfread가 각 차원의 시작부터 끝까지 데이터를 읽어 들이지만, 첫 차원의 데이터 값만 하나씩 건너뛰며 읽어 들일 것을 지정합니다.

data = hdfread('example.hdf','Example SDS','Index',{[],[2 1],[]})

HDF Vdata 세트에 서브셋 설정 파라미터

HDF Vdata로 작업을 하는 경우 hdfread는 다음과 같은 파라미터를 지원합니다.

파라미터

설명

'Fields'

읽어 들일 필드의 이름을 지정하는 문자형 벡터 또는 string형 스칼라. 여러 개의 필드 이름을 지정할 때는 문자형 벡터로 구성된 셀형 배열 또는 string형 배열을 사용해야 합니다.

'FirstRecord'

읽어 들이기 시작할 레코드를 지정하는 번호(1부터 시작)

'NumRecords'

읽어 들일 레코드의 총수를 지정하는 숫자

예를 들어, 다음 코드는 HDF 파일 example.hdf에서 Vdata 세트 Example Vdata를 읽어 들입니다.

data = hdfread('example.hdf','Example Vdata','FirstRecord', 2,'NumRecords', 5)

HDF-EOS 그리드 데이터의 서브셋 설정 파라미터

HDF-EOS 그리드 데이터로 작업을 할 경우 hdfread는 다음과 같은 세 가지 유형의 파라미터를 지원합니다.

  • 필수 파라미터

  • 파라미터(선택 사항)

  • 상호 배타적 파라미터 — hdfread에 대한 호출에서 이들 파라미터 중 하나만 사용할 수 있으며, 선택적 파라미터와 함께 사용할 수 없습니다.

    파라미터

    설명

    필수 파라미터

    'Fields'

    읽어 들일 필드를 지정하는 문자형 벡터 또는 string형 스칼라. 한 개의 그리드 데이터 세트에 하나의 필드 이름만 지정할 수 있습니다.

    상호 배타적인 파라미터(선택 사항)

    'Index'

    요소를 3개 가진 셀형 배열 {start,stride,edge}. 데이터 세트에서 읽어 들일 위치, 범위, 값을 지정합니다.

    start — 파일에서 읽어 들이기 시작할 위치를 지정하는 배열

    디폴트: 1. 각 차원의 첫 번째 요소에서 시작합니다. 값은 데이터 세트의 모든 차원 크기를 초과해서는 안됩니다.

    stride — 읽어 들일 값 사이의 간격을 지정하는 배열

    디폴트: 1. 데이터 세트의 모든 요소를 읽어 들입니다.

    edge — 읽어 들일 각 차원의 길이를 지정하는 배열

    디폴트: 해당 차원의 길이를 갖는 배열

    'Interpolate'

    요소를 2개 가진 셀형 배열 {longitude,latitude}. 쌍선형 보간(Bilinear Interpolation) 영역을 정의하는 위도와 경도 점을 지정합니다. 각 요소는 경도 및 위도 좌표를 지정하는 N 길이의 벡터입니다.

    'Pixels'

    요소를 2개 가진 셀형 배열 {longitude,latitude}. 영역을 정의하는 경도 및 위도 좌표를 지정합니다. 각 요소는 경도 및 위도 좌표를 지정하는 N 길이의 벡터입니다. 이 영역은 원점이 그리드의 왼쪽 위 코너에 있는 픽셀 행과 열로 변환됩니다.

    참고: 이것은 'Box' 영역을 읽는 것에 해당하는 픽셀입니다.

    'Tile'

    타일을 지원하는 HDF-EOS Grid 파일의 경우 읽을 타일의 좌표를 지정하는 벡터

    파라미터(선택 사항)

    'Box'

    요소를 2개 가진 셀형 배열 {longitude,latitude}. 영역을 정의하는 경도와 위도의 좌표를 지정합니다. longitudelatitude는 요소를 2개 가진 벡터로, 경도 및 위도 좌표를 지정합니다.

    'Time'

    요소를 2개 가진 셀형 배열 [start stop]. startstop은 기간의 시작점 및 끝점을 나타내는 숫자입니다.

    'Vertical'

    요소를 2개 가진 셀형 배열 {dimension, range}

    dimension — 읽어 들일 데이터 세트 필드의 이름을 지정하는 문자형 벡터 또는 string형 스칼라. 한 개의 그리드 데이터 세트에 하나의 필드 이름만 지정할 수 있습니다.

    range — 요소를 2개 가진 배열. 서브셋의 최소 및 최대 범위를 지정합니다. dimension이 차원 이름인 경우 range는 추출할 요소의 범위를 지정합니다. dimension이 필드 이름인 경우 range는 추출할 값의 범위를 지정합니다.

    'Vertical' 서브셋 설정은 단독으로 사용되거나 'Box' 또는 'Time'과 함께 사용될 수 있습니다. 여러 차원을 따르는 영역의 서브셋에 대해 hdfread를 한 번 호출할 때 최대 여덟 번까지 수직 서브셋 설정이 사용될 수 있습니다.

예를 들면 다음과 같습니다.

data = hdfread('grid.hdf','PolarGrid','Fields','ice_temp','Index', {[5 10],[],[15 20]})

HDF-EOS 점 데이터의 서브셋 설정 파라미터

HDF-EOS 점 데이터로 작업할 때, hdfread에는 두 개의 필수 파라미터와 세 개의 선택적 파라미터를 갖습니다.

파라미터

설명

필수 파라미터

'Fields'

읽어 들일 데이터 세트 필드의 이름을 포함하는 문자형 벡터 또는 string형 스칼라. 필드 이름이 여러 개인 경우 문자형 벡터로 구성된 셀형 배열 또는 string형 배열을 사용해야 합니다.

'Level'

HDF-EOS 점 데이터 세트에서 읽어 들일 레벨을 지정하는 번호(1부터 시작)

상호 배타적인 파라미터(선택 사항)

'Box'

요소를 2개 가진 셀형 배열 {longitude,latitude}. 영역을 정의하는 경도와 위도의 좌표를 지정합니다. longitudelatitude는 요소를 2개 가진 벡터로, 경도 및 위도 좌표를 지정합니다.

'RecordNumbers'

읽어 들일 레코드 수를 지정하는 벡터

'Time'

요소를 2개 가진 셀형 배열 [start stop]. startstop은 기간의 시작점 및 끝점을 나타내는 숫자입니다.

예를 들면 다음과 같습니다.

hdfread(...,'Fields',{field1, field2},...
            'Level',level,'RecordNumbers',[1:50, 200:250])

HDF-EOS 주사(Swath) 데이터의 서브셋 설정 파라미터

HDF-EOS 주사(Swath) 데이터로 작업할 경우 hdfread는 다음과 같은 세 가지 유형의 파라미터를 지원합니다.

  • 필수 파라미터

  • 파라미터(선택 사항)

  • 상호 배타적 파라미터

hdfread에 대한 호출에서 이들 상호 배타적 파라미터 중 하나만 사용할 수 있으며, 선택적 파라미터와 함께 사용할 수 없습니다.

파라미터

설명

필수 파라미터

'Fields'

읽어 들일 데이터 세트 필드의 이름을 포함하는 문자형 벡터 또는 string형 스칼라. 주사(Swath) 데이터 세트에 대해 하나의 필드 이름만 지정할 수 있습니다.

상호 배타적인 파라미터(선택 사항)

'Index'

요소를 3개 가진 셀형 배열 {start,stride,edge}. 데이터 세트에서 읽어 들일 위치, 범위, 값을 지정합니다.

  • start — 파일에서 읽어 들이기 시작할 위치를 지정하는 배열

    디폴트: 1. 각 차원의 첫 번째 요소에서 시작합니다. 값은 데이터 세트의 모든 차원 크기를 초과해서는 안됩니다.

  • stride — 읽어 들일 값 사이의 간격을 지정하는 배열

    디폴트: 1. 데이터 세트의 모든 요소를 읽어 들입니다.

  • edge — 읽어 들일 각 차원의 길이를 지정하는 배열

    디폴트: 해당 차원의 길이를 갖는 배열

'Time'

요소를 3개 가진 셀형 배열 {start, stop, mode}. 여기서 startstop은 기간의 시작점과 끝점을 지정하며, mode는 영역 내의 교차 추적에 대한 포함 기준을 정의하는 문자형 벡터 또는 string형 스칼라입니다. 교차 추적은 다음과 같은 조건이 충족될 경우 영역 내에서 이루어집니다.

  • 중간점이 상자 내부에 있음(mode='midpoint').

  • 끝점 중 하나가 상자 내부에 있음(mode='endpoint').

파라미터(선택 사항)

'Box'

요소를 3개 가진 셀형 배열 {longitude, latitude, mode}. 영역을 정의하는 경도와 위도 좌표를 지정합니다. longitudelatitude는 요소를 2개 가진 벡터로, 경도와 위도 좌표를 지정합니다. mode는 영역 내 교차 추적의 포함을 정의하는 문자형 벡터 또는 string형 스칼라입니다. 교차 추적은 다음과 같은 조건이 충족될 경우 영역 내에서 이루어집니다.

  • 중간점이 상자 내부에 있음(mode='midpoint').

  • 끝점 중 하나가 상자 내부에 있음(mode='endpoint').

  • 모든 점이 상자 내부에 있음(mode='anypoint').

'Vertical'

요소를 2개 가진 셀형 배열 {dimension, range}

  • dimension은 데이터의 서브셋이 될 차원 이름 또는 필드 이름을 지정하는 문자형 벡터 또는 string형 스칼라입니다.

  • 요소를 2개 가진 벡터 range. 서브셋의 최소 범위 및 최대 범위를 지정합니다. dimension이 차원 이름인 경우 range는 추출할 요소의 범위를 지정합니다. dimension이 필드 이름인 경우 range는 추출할 값의 범위를 지정합니다.

    'Vertical' 서브셋 설정은 단독으로 사용되거나 'Box' 또는 'Time'과 함께 사용될 수 있습니다. 여러 차원을 따르는 영역의 서브셋에 대해 hdfread를 한 번 호출할 때 최대 여덟 번까지 수직 서브셋 설정이 사용될 수 있습니다.

예를 들면 다음과 같습니다.

hdfread('swath.hdf', 'Example Swath', 'Fields', 'Temperature', ...
         'Time', {5000, 6000, 'midpoint'})

예제

모두 축소

HDF 파일의 이름과 데이터 세트의 이름을 지정합니다. 이 예제에서는 샘플 HDF 파일에서 temperature라는 데이터 세트를 읽습니다.

data = hdfread('sd.hdf','temperature');

hdfinfo를 호출하여 HDF 파일의 내용에 대한 정보를 가져옵니다.

fileinfo = hdfinfo("sd.hdf")
fileinfo = 

  struct with fields:

      Filename: 'matlabroot\matlab\toolbox\matlab\matlab_sci\hdf4\sd.hdf'
    Attributes: [1×1 struct]
           SDS: [1×2 struct]
         Vdata: [1×1 struct]

hdfinfo가 반환한 데이터에서, 가져오려는 특정 데이터 세트의 정보를 가진 구조체를 추출합니다. 이 예제에서는 SDS 필드의 구조체를 사용하여 과학 데이터 세트(Scientific Data Set)를 가져옵니다.

sds_info = fileinfo.SDS(2)
sds_info = 

  struct with fields:

       Filename: 'matlabroot\matlab\toolbox\matlab\matlab_sci\hdf4\sd.hdf'
           Type: 'Scientific Data Set'
           Name: 'temperature'
           Rank: 2
       DataType: 'double'
     Attributes: [1×11 struct]
           Dims: [2×1 struct]
          Label: {}
    Description: {}
          Index: 1

데이터 세트의 데이터를 가져오기 위해 이 구조체를 hdfread로 전달합니다.

data = hdfread(sds_info);

예제 파일 example.hdf의 HDF-EOS 전역 그리드 필드 TbOceanRain에서 데이터를 읽어 들입니다.

data1 = hdfread('example.hdf','MonthlyRain','Fields','TbOceanRain');

동일한 필드의 북반구 데이터를 읽습니다. 해당 영역의 경도 좌표 및 위도 좌표를 지정하기 위해 Box 파라미터를 사용합니다.

data2 = hdfread('example.hdf','MonthlyRain', ...
'Fields','TbOceanRain', ...
'Box', {[0 360],[0 90]});

예제 파일 example.hdf에 대한 정보를 가져옵니다.

fileinfo = hdfinfo('example.hdf');

example.hdf의 과학 데이터 세트(Scientific Data Set)에 대한 정보를 가져옵니다.

data_set_info = fileinfo.SDS;

데이터 세트의 크기를 확인합니다.

data_set_info.Dims.Size
ans = 16
ans = 5

hdfread에서 'index' 파라미터를 사용하여 데이터 세트의 데이터 서브셋을 읽어 들입니다. 이 예제에서는 [3 3]의 시작 인덱스와 값 사이의 간격 1([]는 디폴트 값 1을 나타냄), 그리고 10행 2열의 길이를 지정합니다.

data = hdfread(data_set_info,'Index',{[3 3],[],[10 2]});
data(:,1)
ans = 10x1 int16 column vector

    7
    8
    9
   10
   11
   12
   13
   14
   15
   16

data(:,2)
ans = 10x1 int16 column vector

    8
    9
   10
   11
   12
   13
   14
   15
   16
   17

데이터의 세 필드 Idx, Temp, Dewpt를 읽어 들이려면 hdfinfo가 반환한 정보에서 Vdata 필드를 사용합니다.

s = hdfinfo('example.hdf'); 
data = hdfread(s.Vdata(1),'Fields',{'Idx','Temp','Dewpt'})
data=3×1 cell array
    {[  1 2 3 4 5 6 7 8 9 10]}
    {[0 12 3 5 10 -1 3 0 2 1]}
    {[5 5 7 11 7 10 4 14 4 8]}

버전 내역

R2006a 이전에 개발됨

참고 항목