- This topic has 2개 답변, 3명 참여, and was last updated 4 years, 4 months 전에 by inmyta27.
-
글쓴이글
-
-
rjh4352회원
안녕하세요,
hdf5을 읽어야 하는데요.
자료를 읽는 건 문제없이 읽는데scale_factor와 add_offset을 읽는 방법을 도무지 모르겠습니다..
구글에 검색해도 제대로 나오질 않네요 ㅠ
제가 읽으려는 변수가 파일들에 따라 add_offset 값이 제각각이라서.. 반드시 읽어야 하는 상황입니다혹시 읽어들이는 방법 있을까요?
알려주시면 감사하겠습니다!
-
Sangwoo회원
어떤 종류의 데이터가 담긴 파일인지는 모르겠으나, HDF5 형식으로 된 파일로부터 Group이나 Dataset이 아닌 Attribute에 해당되는 항목들을 읽어야 하는 경우인 것으로 보입니다. 아마도 Group이나 Dataset에 해당되는 항목들을 읽어오는 작업은 이미 하신 것 같습니다. 언급하신 scale_factor나 add_offset은 아마도 Attribute의 범주에 해당되는 항목들일 것으로 보이는데요. HDF5 형식의 파일로부터 Attribute에 해당되는 항목들을 추출하는 과정은 약간 복잡합니다. 저도 이 방법에 대하여 완벽하게 이해를 하고 있지는 못하지만 그냥 제가 아는 한도 내에서 답을 드려보겠습니다. 대략적인 과정은 다음과 같습니다. 예제 HDF5 파일은 IDL 디렉토리 내에 딸려오는 hdf5_test.h5인 경우로 가정합니다.
file = FILEPATH(‘hdf5_test.h5’, SUBDIRECTORY=[‘examples’,’data’])
fid = H5F_OPEN(file)
gid = H5G_OPEN(fid, ‘images’)
did = H5D_OPEN(gid, ‘Eskimo’)Attribute라는 것은 각 데이터셋마다 존재하기 때문에, 여기서는 한 예로서 예제 파일 내에서 images 그룹에 속하는 Eskimo라는 데이터셋을 대상으로 합니다. 그러면 위와 같은 과정을 거쳐서 특정 데이터셋에 해당되는 id 정보를 did라는 변수로 뽑아냅니다. 이 상황에서 먼저 다음과 같이 attribute가 총 몇개가 있는지 확인합니다.
n_att = H5A_GET_NUM_ATTRS(did)
PRINT, n_att이 예제에서는 실제로 7개라고 나옵니다. 인덱스로는 0~6이 존재한다는 것입니다. 이제는 인덱스를 하나 정하고 해당되는 attribue의 고유 id 번호를 뽑아내야 합니다. 예를 들어 네번째 attribute에 대해서 이러한 작업을 하려면 다음과 같은 명령을 실행해야 합니다.
aid = H5A_OPEN_IDX(did, 3)
그리고 이 attribute의 이름을 보기 위하여 다음과 같은 명령을 실행합니다.
att_name = H5A_GET_NAME(aid)
HELP, att_name그러면 이 예제에서는 다음과 같이 해당 attribute의 이름이 출력됩니다.
ATT_NAME STRING = ‘IMAGE_COLORMODEL’
사실 모든 attribute들의 목록을 한꺼번에 뽑아낼 수 있으면 좋은데, 그럴 수 있는 방법이 보이지 않습니다. 따라서 이와 같이 인덱스별로 이름을 출력하다보면 사용자가 원하는 이름의 attribute가 있는지 확인이 가능할 것입니다. 여기서 원하는 attribute의 인덱스를 찾았다면 다음과 같은 명령을 실행하여 실제 그 attribute 정보를 추출합니다.
att = H5A_READ(aid)
HELP, att대략 이와 같은 방식이 될 것 같습니다. IDL에서 HDF5 형식의 파일을 다루는데 사용되는 코드들의 일람은 IDL 도움말에서 다음과 같은 섹션에서 볼 수 있습니다.
Contents -> Routines (by Topic) -> Input/Output -> HDF5 Routines
아마 파일로부터 데이터를 읽는 방법과 관련하여 이 내용을 이미 참조하셨을지도 모르겠습니다. 근데 HDF5의 경우는 netCDF 등과 같은 타 포맷과는 달리 루틴들의 종류가 많아서 내용을 파악하기가 쉽지는 않습니다. 일단 제가 알려드린 내용을 참조해보시길 바랍니다. 만약 제가 알려드린 내용만으로는 별 도움이 안된다면 아무래도 더 깊은 내용은 직접 찾아보셔야 할 것 같습니다.
-
inmyta27회원
ㄹㄹ
-
-
글쓴이글