HDF5形式のファイル (3) pythonを使った読み込み
前回、乱数とそのスペクトル(フーリエ変換結果)をHDF5形式で保存しました。
今回は、それを読みこんで、再度プロットし直すことにしましょう。
前回の記事をみて、"random.h5"というファイルを作っている前提で話を進めていきます。
結論
今回も結論から。
import h5py import matplotlib.pyplot as plt input_file = "random.h5" #ここには自分の状況にあったパスを入れてください h5file = h5py.File(input_file,"r") fig, (ax_random, ax_spectrum) = plt.subplots(1,2,figsize = (14,5.5)) for sample_frequency in np.array([10.,100,1000.]): folder="frequency_" + str(np.int(sample_frequency)) #データ読み込み random = h5file[folder+"/random_number"].value spectrum = h5file[folder+"/spectrum"].value #plot ti = np.arange(0,100.,1)/sample_frequency ax_random.plot(ti,random,'o') ax_spectrum.plot(np.abs(spectrum))
こんなのができます
データの確認
ディレクトリの確認から始めます。
まずは、"random.h5"を保存したフォルダを探しましょう。 前回は、
import h5py output_file = "random.h5" h5file = h5py.File(output_file,'w') for i in np.arange(3): dir = 'frequency_'+str(np.int(sampling_frequency[i])) h5file.create_group(dir) h5file.create_dataset(dir+'/random_number',data= sample[i]) h5file.create_dataset(dir+'/spectrum',data= sample_fft[i]) h5file.flush() h5file.flush() h5file.close()
こんな感じで保存したので、 ipython notebookのファイルが入っていたフォルダの中に"random.h5"ができているはずです。
ノートブックファイル(*.ipynb)とhdf5ファイルが同じフォルダに入っているなら特に気にしなくていいのですが、そうでない場合、そのディレクトリまでのパスをしっかり確認しておきましょう。
見つかったら開いてみてください。
とまぁ、
- frequency
- 乱数
- スペクトル
のような階層になっていることを思い出せればいいです。
データの読み込み
ぶっちゃけデータが書き出せるなら、読み込みはむっちゃ楽勝です。
まずは読み込むHDF5ファイルを指定します.
input_file = "random.h5" h5file = h5py.File(input_file,"r")
この操作は、read only でファイルを開く動作に対応します。
次に、読み込みたいデータの入っているグループ(フォルダ)と、読み込みたいデータ自体を指定すると、データセットが読み込めます。
folder="frequency_" + str(np.int(sample_frequency)) random = h5file[folder+"/random_number"].value spectrum = h5file[folder+"/spectrum"].value
上の例では、"random"に"random_number"というデータ・セットを渡しています。".value"をつけるのを忘れないようにしてください。
ちなみに、データ・セットがndarrayのような多次元の場合、上の例のように書くと、自動的に全部引っ張ってきます。 もし、"n行m列のデータ・セット"のうち、”一列目だけ欲しい” 場合、
test = h5file[group_name + data_set].value[:,0]
のようにしてあげればいいです。
つまるところ、
h5file[group_name + data_set].value
と書くと、こいつはデータ・セットそのものの配列になっている、ということが理解できていれば、読み込みは問題なくできるでしょう。
プロット
プロットについては、プロットまとめを参考にしてください。