出力がPythonコードである エントリがすべてfloat
タイプであるサイズのマトリックス。拡張子.dat
を付けて保存すると、ファイルサイズは500 MB程度になります。 h5py
を使用すると、ファイルサイズがかなり小さくなることを読みました。したがって、A
という名前の2D numpy配列があるとします。 h5pyファイルに保存するにはどうすればよいですか?また、配列を操作する必要があるので、同じファイルを読み取って別のコードのnumpy配列として配置するにはどうすればよいですか?
h5pyは、datasetsおよびgroupsのモデルを提供します。前者は基本的に配列であり、後者はディレクトリと考えることができます。それぞれに名前が付けられています。 APIとサンプルのドキュメントをご覧ください:
http://docs.h5py.org/en/latest/quick.html
すべてのデータを事前に作成し、それをhdf5ファイルに保存するだけの簡単な例は次のようになります。
In [1]: import numpy as np
In [2]: import h5py
In [3]: a = np.random.random(size=(100,20))
In [4]: h5f = h5py.File('data.h5', 'w')
In [5]: h5f.create_dataset('dataset_1', data=a)
Out[5]: <HDF5 dataset "dataset_1": shape (100, 20), type "<f8">
In [6]: h5f.close()
その後、次を使用してそのデータを再び読み込むことができます。
In [10]: h5f = h5py.File('data.h5','r')
In [11]: b = h5f['dataset_1'][:]
In [12]: h5f.close()
In [13]: np.allclose(a,b)
Out[13]: True
間違いなくドキュメントをチェックしてください:
Hdf5ファイルへの書き込みは、h5pyまたはpytablesのいずれかに依存します(それぞれに、hdf5ファイル仕様の上にある異なるpython APIがあります)。また、np.save
、np.savez
など、numpyがネイティブで提供する他の単純なバイナリ形式も確認する必要があります。
クリーンな方法 ファイルのオープン/クローズを処理し、メモリリークを回避します。
Prep:
import numpy as np
import h5py
data_to_write = np.random.random(size=(100,20)) # or some such
書き込み:
with h5py.File('name-of-file.h5', 'w') as hf:
hf.create_dataset("name-of-dataset", data=data_to_write)
読み取り:
with h5py.File('name-of-file.h5', 'r') as hf:
data = hf['name-of-dataset'][:]