2016-08-24 87 views
0

我的问题是关于为.hdf5文件创建对象类型或文档。该对象将具有三个属性,一个id,一个user_id和一个大小为64的布尔数组。我必须创建它们大约10000000(1000万)个。如何为.hdf5类型创建特定类型的对象?

想象一下mongodb,我必须像那样使用它们。我必须针对某些特定的user_id对象以及所有这些对象进行查询。

任何建议和帮助表示赞赏。

回答

0

我会继续前进,并为这种情况使用字典。我觉得字典的扩展很好。由于查询将在user_id上,因此我会将其作为关键。

结构会像

{ 
    'user_id-xyz': { 
     'id':'id-1212', 
     'boolarray':[True,False,..], 

    }, 
    'user_id-abc':{ 
     ... 
    } 
} 

为了实现这一点,我可能会去一个numpy的自定义数据类型。

element = np.dtype([('id', 'i16'), ('boolarray', 'b',(64,1))]) 
f = h5py.File('foo.hdf5','w') 
dset = f.create_dataset("blocky", (1000000,), dtype='V79') # 64(bools)+15(for id) 
grp = f.create_group("user_id-xyz") 
# create subgroups for each id. 
subdataset = grp.create_dataset('ele',(1,),dtype=element) 

# test of membership. 
'user_id-xyz' in f 
# retrieval 
f.get('user_id-xyz') 
# all keys. 
f.keys() 

总的来说,我希望这可以帮助你。

+0

好吧,但我如何存储这些对象?据我所知hdf5使用numpy数组来存储。 –

+0

好的。我没有真正注意到h5py标签。但是,看看文档,我会使用user_id作为一个组。在那里我会有一个布尔阵列。前n个数字代表id。 id的大小是多少? – Vasif

+0

2^10或2^15最有可能。 –