Manual: https://docs.h5py.org/en/stable/
h5py
๋ HDF5
๋ฐ์ดํฐ ํฌ๋งท์ Python
์ผ๋ก ๋ค๋ฃฐ ์ ์๋ ํจํค์ง์ด๋ค.
HDF5
๋ฅผ ์ด์ฉํ๋ฉด ๋๋์ NumPy
๋ฐ์ดํฐ ๋ฑ์ ์์ฝ๊ฒ ๊ด๋ฆฌํ ์ ์๋ค.
About HDF5
HDF๋ Hierarchical Data Format์ ์ฝ์์ด๋ค.
HDF5์ ๋ชจ๋ object๋ ๊ฐ์์ 'name'์ด ์๊ณ , ๋ค์๊ณผ ๊ฐ์ด ๊ณ์ธต์ ์ธ ๊ตฌ์กฐ๋ก ๊ด๋ฆฌ๋๋ค.
์ผ๋ฐ์ ์ธ ์ด์์ฒด์ ์ ํ์ผ์์คํ ์ ์๊ฐํ๋ฉด ๋๋ค. ํด๋์ ํ์ผ๋ก ์ด๋ฃจ์ด์ ธ ์๋ ๊ฒ์ฒ๋ผ, ๊ฐ ๊ณ์ธต์ / separator์ ์ํด ๋ถ๋ฆฌ๋๋ค (POSIX-style).
HDF5 ๊ตฌ์กฐ์์, ๊ฐ ํด๋๋ 'Group'์ด๋ผ๊ณ ๋ถ๋ฆฐ๋ค. Root ํด๋ ์ญ์ ํ๋์ ํด๋์ธ ๊ฒ์ฒ๋ผ, ์์ฑํ HDF file ์ญ์ ํ๋์ group์ด๋ค.
ํ์ผ์ ์ญํ ์ ํ๋ ๊ฒ์ 'Dataset'๊ณผ 'Attribute'์ด๋ค.
Dataset์ HDF5 file์ ๋ด๊ฒจ์ ธ ์๋ ๋ฐ์ดํฐ๋ฅผ ๋งํ๋ค. ์๋ฅผ ๋ค๋ฉด numpy array๊ฐ ๋ ์ ์๋ค.
Attribute๋ ๋ฐ์ดํฐ์ metadata๋ผ๊ณ ์๊ฐํ ์ ์๋ค. ๋ฐ์ดํฐ์ ๋ํ ์ ๋ณด๋ค์ ํจ๊ป ๋ณด๊ดํ ์ ์๋ค.
Install
Conda๋ pip๋ฅผ ์ด์ฉํด ์ค์นํ ์ ์๋ค.
conda install h5py
pip install h5py
Import & create HDF file
Python์์ ๋ค์๊ณผ ๊ฐ์ด importํ์ฌ ์ฌ์ฉํ ์ ์๋ค.
import h5py
HDF5 ํ์ผ์ ๋ค๋ฃจ๋ ๋ฒ์ ์ผ๋ฐ์ ์ธ Python file object๋ฅผ ๋ค๋ฃจ๋ ๋ฐฉ๋ฒ๊ณผ ๋์ผํ๋ค.
๋ค์๊ณผ ๊ฐ์ด w
๋ชจ๋๋ก HDF5 ํ์ผ์ ์์ฑํ ์ ์๋ค.
with h5py.File('myfile.hdf5', 'w') as f:
...
์ฌ์ฉํ ์ ์๋ ๋ชจ๋๋ ๋ค์๊ณผ ๊ฐ๋ค.
Group
Group์ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ๋ค.
group_a = f.create_group('group_a')
๋ค์๊ณผ ๊ฐ์ด group์ name์ ํ์ธํ ์ ์๊ณ , group ํ์์ group์ ์์ฑํ ์๋ ์๋ค.
#group name ํ์ธ
print(group_a.name)
>> '/group_a'
#ํ์ group ์์ฑ
group_b = group_a.create_group('group_b')
print(group_b.name)
>> '/group_a/group_b
์์ฑ๋ group๋ค์ Python dictionary์ ๊ฐ์ ๋ฐฉ์์ผ๋ก ๊ด๋ฆฌ๋๋ค.
๊ฐ group์ name์ด key๊ฐ ๋์ด, name์ ์ด์ฉํด ๊ฐ group์ ์ ๊ทผํ ์ ์๊ณ ,
๋ง์ฐฌ๊ฐ์ง๋ก dictionary์ ์ฌ๋ฌ ๊ธฐ๋ฅ๋ค์ ์ด์ฉํ ์ ์๋ค.
#group ์ ๊ทผ
group_b = f['/group_a/group_b'] #์ด๋ฏธ ์์ฑ๋์ด ์๋ group๋ง ๊ฐ๋ฅ
#group๋ค์ list ํ์ธ
print(list(f.keys())
>> ['group_a']
print(list(grou_a.keys())
>> ['group_b']
#group ์ญ์
del f['/group_a/group_b']
print(list(grou_a.keys())
>> []
Dataset
Dataset์ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ๋ค. ์ฒซ ๋ฒ์งธ ์ธ์๋ก dataset์ name์ด ๋ค์ด๊ฐ๊ณ , data์ dtype ๋ฑ์ ์ง์ ํ ์ ์๋ค. ์๋์์๋ group_a์ dataset์ ์์ฑํ์ง๋ง, root์๋ dataset์ ์์ฑํ ์ ์๋ค (f.create_dataset
)
import numpy as np
data = np.arange(100)
group_a.create_dataset('data_a', data=data, dtype=np.int16)
์์ฑ๋ dataset์ group๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก name์ผ๋ก ์ ๊ทผํ ์ ์๋ค.
data_a = f['data_a']
Attribute
Attribute๋ dataset๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ํ์ผ์ ์ญํ ์ ํ์ง๋ง, .attrs
๋ฅผ ํตํด ์ ๊ทผํ ์ ์๋ค.
Group์ attribute๋ฅผ ์ถ๊ฐํ๋ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ๋ค. Dataset์ ์์ฑ ๋ฐฉ๋ฒ๊ณผ ๊ฑฐ์ ๋์ผํ๋ฉฐ, dtype ์ญ์ ์ง์ ํด์ค ์ ์๋ค.
group_a.attrs.create('attr_a', data='hello')
Dataset๊ณผ ๋ค๋ฅธ ์ ์, attribute์ ๊ฒฝ์ฐ ์ ๊ทผ๊ณผ ๋์์ ์์ฑ์ ํ ์๋ ์๋ค.
group_a.attrs['attr_b'] = 'hi'
'๐ Python & library > Etc.' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Optuna] ๋ฅ๋ฌ๋ ํ์ดํผํ๋ผ๋ฏธํฐ ์ต์ ํํ๊ธฐ (1) | 2023.12.10 |
---|---|
[Tensorboard] ์ฐจํธ ์๊น ๋ณ๊ฒฝํ๊ธฐ (0) | 2022.10.12 |
[matplotlib] matplotlib.pyplot์ ์ด์ฉํ ์ด๋ฏธ์ง ์๊ฐํ ์ด์ ๋ฆฌ (0) | 2022.08.29 |