web-dev-qa-db-ja.com

PythonでHDF5ファイルを読み取る方法

Pythonでhdf5ファイルからデータを読み取ろうとしています。 h5pyを使用してhdf5ファイルを読み取ることはできますが、ファイル内のデータにアクセスする方法がわかりません。

私のコード

import h5py    
import numpy as np    
f1 = h5py.File(file_name,'r+')    

これは機能し、ファイルが読み込まれます。しかし、ファイルオブジェクトf1内のデータにアクセスするにはどうすればよいですか?

54
Sameer Damir

HDF5を読む

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])

HDF5を書き込む

#!/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の構成ファイル

84
Martin Thoma

パンダを使用できます。

import pandas as pd
pd.read_hdf(filename,key)
17
Danny

ファイルの読み取り

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()
6
Daksh

以下は、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

徹底的にテストしていないが、私のために仕事をしている。

2
Attila

.hdf5ファイルのコンテンツを配列として読み取るには、次のようにします。

> import numpy as np 
> myarray = np.fromfile('file.hdf5', dtype=float)
> print(myarray)
1
Raza

必要なのは、データセットを作成することです。クイックスタートガイドを見ると、データセットを作成するためにファイルオブジェクトを使用する必要があることがわかります。したがって、f.create_datasetを実行すると、データを読み取ることができます。これは docs で説明されています。

1
Games Brainiac

以下のコードを使用してデータを読み取り、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)
1
ashish bansal