【发布时间】:2019-04-04 18:32:18
【问题描述】:
我在重命名 hdf5 中的数据集时遇到问题。这个过程非常缓慢。我阅读了一些文档,指出数据集名称只是指向数据的链接,因此一种可接受的重命名方式是:
group['new_name'] = group['old_name']
del group['old_name']
但这太慢了(一夜之间只完成了 5%),这让我觉得我的过程完全错误。
我正在使用 python h5py,这是我的慢代码:
# Open file
with h5py.File('test.hdf5') as f:
# Get all top level groups
top_keys = [key for key in f.keys()]
# Iterate over each group
for top_key in top_keys:
group = f[top_key]
tot_digits = len(group)
#Rename all datasets in the group (pad with zeros)
for key in tqdm(group.keys()):
new_key = str(key)
while len(new_key)<tot_digits:
new_key = '0'+str(new_key)
group[new_key] = group[key]
del group[key]
根据@jpp 的建议,我还尝试用group.move 替换最后两行:
group.move(key, new_key)
但是这种方法同样慢。我有几个具有相同数量数据集的组,但每个组都有不同大小的数据集。拥有最大数据集(最多字节)的组似乎重命名最慢。
当然有一种方法可以快速做到这一点。数据集名称只是一个符号链接吗?还是重命名本身会导致整个数据集被重写?我应该如何重命名 HDF5 文件中的多个数据集?
【问题讨论】:
-
您的组中有多少个数据集?如果您有一些代码来创建一个简单的 HDF5 文件,那就太好了,这样我们就可以对其进行基准测试(并同时展示您的问题)。
-
我每组只有 1M 个数据集,而我的 hdf5 文件约为 20GB,因此共享数据集很困难。关键问题更多地与命名数据集的行为方式有关。名称只是一个符号链接吗?还是重命名本身会导致整个数据集被重写? @jpp
-
不确定这是否仍然相关,但我过去在命名 HDF5 组时遇到了问题,名称以数字开头,如果没有其他方法似乎可以尝试不同的命名方案。跨度>
-
@Joules 我的组用字母命名,但我的数据集用数字命名。您是否也遇到过数据集名称的问题?还是只是组?
-
IIRC 它不允许我保存名称以数字作为第一个字符的数据集或组。我可能一直在使用
pandasHDF5,所以我不确定它是否会与 h5py 产生相同的反应。
标签: python performance hdf5 h5py