【发布时间】:2013-09-28 11:34:13
【问题描述】:
我想对 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。
编辑: 如果循环的第二行未注释,则以下代码不会减慢速度。没有它,它确实会变慢
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()
编辑:我发现访问多维数据集的第一维似乎没有问题。当涉及更高维度时,就会出现问题。
【问题讨论】:
标签: python performance memory-management hdf5 h5py