h5py の簡単な使い方
[History] [Last Modified] (2019/04/15 15:06:45)
Recent posts
What is this site?
A platform for makers to share their knowledge.

Share your robots/products with others.
New robots/products

概要

NumPy から扱えるデータをファイルに保存するためのフォーマットとして HDF5 (Hierarchical Data Format) が利用されます。これを Python から扱うためには h5py を利用します。

pip install h5py

サンプルコード

NumPy データの保存

import h5py
import numpy as np

with h5py.File('sample.h5', 'w') as f:
    a = np.array([1,0])
    f.create_dataset('mydataset', data=a)

読み込み

import h5py
f = h5py.File('sample.h5', 'r')

f.keys() #=> [u'mydataset']
dset = f['mydataset']

dset.shape #=> (2,)
dset.dtype #=> dtype('int64')
dset[0] #=> 1
dset[1] #=> 0

dset.name #=> u'/mydataset'

グループとデータセット

グループで他のグループとデータセットを階層化して整理します。

grp = f.create_group('mygroup')
grp2 = grp.create_group('mygroup2')
dset = grp2.create_dataset('mydataset3', (10,), dtype='i')

dset.name #=> u'/mygroup/mygroup2/mydataset3'

以下の二つは同じです。

f['mygroup']['mygroup2']['mydataset3'] == f['mygroup/mygroup2/mydataset3'] #=> True

属性

グループおよびデータセットのメタ情報を属性として保存できます。

grp.attrs['myattr'] = 1
dset.attrs['myattr'] = 2

画像の保存

画像データを NumPy ndarray で用意して HDF5 に保存する場合は以下のようになります。ROI も属性としてデータセットに保存してみます。

import h5py
import matplotlib.image as mpimg

with h5py.File('image.h5', 'w') as f:
    img = mpimg.imread('./myimage.png')
    dset = f.create_dataset('mydataset', data=img)
    dset.attrs['roi'] = ((0,0), (100,100))

読み込んで表示してみます。

import h5py
from matplotlib import pyplot as plt

f = h5py.File('image.h5', 'r')
dset = f['mydataset']
roi = dset.attrs['roi']
part = dset[roi[0][0]:roi[1][0], roi[0][1]:roi[1][1]]
plt.imshow(part)
plt.show()

Uploaded Image

Related pages