H5PY写得很慢

时间:2016-04-27 02:58:01

标签: hdf5 h5py

我有一个如下所示的h5py数据集。我想按字符串而不是数值索引记录。所以,例如我可以通过dset[dset.attrs['id1']]获得第一条记录的值。

我正在尝试使用下面的代码编写属性,但它非常慢。如果我在循环中执行%timeit dset.attrs[rid] = idx,则单次写入大约为310ms。我写的字符串是36个字符。我需要写大约10万条记录,大约需要9个小时。有什么必须是非常错误的吗? CPU也是固定的。

ids = ['id1', 'id2', 'id3']
h5 = h5py.File("/tmp/ds.h5", "w")
dset = h5.create_dataset("lds", (100000, ), dtype='float32')

for idx, id in enumerate(ids): # loop takes forever
    dset.attrs[id] = idx # takes about ~310ms

修改

最小"工作"示例

for idx, rid in enumerate(range(10)):
    %timeit dset.attrs[str(rid)] = idx

10 loops, best of 3: 470 ms per loop
10 loops, best of 3: 470 ms per loop
...

单次写入将近0.5秒。

1 个答案:

答案 0 :(得分:1)

使用参数latest的{​​{1}}值。这个很多更快。所以,例如。

libver

见这里:https://github.com/h5py/h5py/issues/705