hdf5 ファイルに含まれるデータセットに単純な関数を適用したいと考えています。これに似たコードを使用しています
import h5py
data_sums = []
with h5py.File(input_file, "r") as f:
for (name, data) in f["group"].iteritems():
print name
# data_sums.append(data.sum(1))
data[()] # My goal is similar to the line above but this line is enough
# to replicate the problem
最初は非常に高速で、ある程度再現可能なデータセットが一定数になると、劇的に遅くなります。最後の行をコメントすると、ほぼ瞬時に終了します。データが保存されている (ここではリストに追加されている) かどうかは問題ではありません: 同様の効果として data[:100] のようなもの。パフォーマンスが低下する前に処理できるデータセットの数は、各反復でアクセスされる部分のサイズに依存します。小さなチャンクを繰り返し処理しても問題は解決しません。
メモリスペースがいっぱいになり、いっぱいになるとプロセスが遅くなると思いますが、その理由はわかりません。
このパフォーマンスの問題を回避するにはどうすればよいですか?
ubuntu 10.04でpython 2.6.5を実行しています。
編集: ループの 2 行目がコメント解除されている場合、次のコードは遅くなりません。それがないと遅くなります
f = h5py.File(path to file, "r")
list_name = f["data"].keys()
f.close()
import numpy as np
for name in list_name:
f = h5py.File(d.storage_path, "r")
# name = list_name[0] # with this line the issue vanishes.
data = f["data"][name]
tag = get_tag(name)
data[:, 1].sum()
print "."
f.close()
編集:多次元データセットの最初の次元へのアクセスは問題なく実行されるように見えることがわかりました。この問題は、より高い次元が含まれる場合に発生します。