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