Pythonでhdf5ファイルからデータを読み取ろうとしています。 h5py
を使用してhdf5ファイルを読み取ることはできますが、ファイル内のデータにアクセスする方法がわかりません。
import h5py
import numpy as np
f1 = h5py.File(file_name,'r+')
これは機能し、ファイルが読み込まれます。しかし、ファイルオブジェクトf1
内のデータにアクセスするにはどうすればよいですか?
import h5py
filename = 'file.hdf5'
f = h5py.File(filename, 'r')
# List all groups
print("Keys: %s" % f.keys())
a_group_key = list(f.keys())[0]
# Get the data
data = list(f[a_group_key])
#!/usr/bin/env python
import h5py
# Create random data
import numpy as np
data_matrix = np.random.uniform(-1, 1, size=(10, 3))
# Write data to HDF5
data_file = h5py.File('file.hdf5', 'w')
data_file.create_dataset('group_name', data=data_matrix)
data_file.close()
詳細については、 h5py docs を参照してください。
アプリケーションでは、次のことが重要になる場合があります。
参照: データのシリアル化形式の比較
構成ファイルを作成する方法を探している場合は、私の短い記事を読むことをお勧めします Pythonの構成ファイル
パンダを使用できます。
import pandas as pd
pd.read_hdf(filename,key)
ファイルの読み取り
import h5py
f = h5py.File(file_name, mode)
存在するHDF5グループを印刷してファイルの構造を調べる
for key in f.keys():
print(key) #Names of the groups in HDF5 file.
データの抽出
#Get the HDF5 group
group = f[key]
#Checkout what keys are inside that group.
for key in group.keys():
print(key)
data = group[some_key_inside_the_group].value
#Do whatever you want with data
#After you are done
f.close()
以下は、kerasのsave_weights関数によって生成された.hdf5ファイルを読み取り、レイヤー名と重みを含むdictを返す簡単な関数です。
def read_hdf5(path):
weights = {}
keys = []
with h5py.File(path, 'r') as f: # open file
f.visit(keys.append) # append all keys to list
for key in keys:
if ':' in key: # contains data if ':' in key
print(f[key].name)
weights[f[key].name] = f[key].value
return weights
https://Gist.github.com/Attila94/fb917e03b04035f3737cc8860d9e9f9b 。
徹底的にテストしていないが、私のために仕事をしている。
.hdf5ファイルのコンテンツを配列として読み取るには、次のようにします。
> import numpy as np
> myarray = np.fromfile('file.hdf5', dtype=float)
> print(myarray)
必要なのは、データセットを作成することです。クイックスタートガイドを見ると、データセットを作成するためにファイルオブジェクトを使用する必要があることがわかります。したがって、f.create_dataset
を実行すると、データを読み取ることができます。これは docs で説明されています。
以下のコードを使用してデータを読み取り、numpy配列に変換します
import h5py
f1 = h5py.File('data_1.h5', 'r')
list(f1.keys())
X1 = f1['x']
y1=f1['y']
df1= np.array(X1.value)
dfy1= np.array(y1.value)
print (df1.shape)
print (dfy1.shape)