我有一个如下所示的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秒。
答案 0 :(得分:1)