4

HDF5 形式のファイルを読み取るために、h5py python パッケージを使用しています。(例 somefile.h5) データセットの内容をテキスト ファイルに書き込みたいと思います。

たとえば、次の内容のテキスト ファイルを作成したいと思います: 1,20,31,75,142,324,78,12,3,90,8,21,1

このコードを使用して、Python でデータセットにアクセスできます。

import h5py
f     = h5py.File('/Users/Me/Desktop/thefile.h5', 'r')
group = f['/level1/level2/level3']
dset  = group['dsetname']

私のデータセットには 20000 を超えるエントリがあるため、私の素朴なアプローチは遅すぎます。

# write all values to file        
for index in range(len(dset)):
        # do not add comma after last value
        if index == len(dset)-1: txtfile.write(repr(dset[index]))
        else:                    txtfile.write(repr(dset[index])+',')
txtfile.close()
    return None

これをファイルに書き込むより速い方法はありますか? おそらく、データセットを NumPy 配列または Python リストに変換してから、ファイル書き込みツールを使用できますか?

(ファイルに書き込む前に、値をより大きな文字列に連結して実験することもできますが、完全にエレガントなものがあることを願っています)

4

4 に答える 4

5

join大きな文字列を構築すると、文字列の優れた方法のおかげで、間抜けな「前回の切り替え」の必要性を節約できるという大きな利点があります。ループ全体を置き換えるには、

txtfile.write(','.join(repr(item) for item in dset))

コードをどれだけエレガントにする必要があるかわかりません...;-)

于 2010-06-11T05:10:47.853 に答える
3

あなたの最初の疑いは正しかったです。最初にそれを Numpy 配列に変換してから、その配列を ASCII にダンプしてください。

my_data = my_h5_group['dsetname'].value # is now a Numpy array
my_data.tofile("my_data.txt")

これは、グループ オブジェクト自体を反復処理するよりも劇的に高速になります。

于 2012-02-14T15:57:07.637 に答える
2

多分HDF5ファイルでh5dumpを使用しますか?

私は(bash)を使用します

(h5dump -y -o /dev/stderr -d $dataset $infile >$errorout) 2>&1 | sed -e 's/, /\n/g' -e 's/,$//' | sed 's/ //g' > $outfile 2> $errorout
于 2011-06-16T16:52:24.003 に答える