2016-11-18 96 views
0

我有一個帶有3個鍵(features,image_ids,index)的hdf5數據庫。 image_ids和index分別有1000個條目。正在檢索給定文字名稱的hdf5索引

的問題是,雖然我可以通過獲得第10 image_ids:

dbhdf5 ["image_ids"][10] 
>>> u'image001.jpg' 

我想要做的相反,即通過將圖像名稱查找索引。喜歡的東西:

dbhdf5 ["image_ids"="image001.jpg"] 
or 
dbhdf5 ["image_ids"]["image001.jpg"] 
or 
dbhdf5 ['index']['image001.jpg'] 

我已經想盡變化我能想到的,但似乎無法找到一種方法來檢索圖像的索引,給它的ID。我收到錯誤信息,如'字段名稱只允許用於複合類型'

+0

請提供有關如何存儲hdf5表的更多詳細信息以及您用於訪問它的包。這個問題的答案[http://stackoverflow.com/questions/1686869/searching-a-hdf5-dataset]表明HDF5不能直接搜索。也許你會更好地使用SQLite進行存儲和檢索? – Neapolitan

回答

0

您正在嘗試的是不可能的。 HDF5通過存儲數組來工作,這些數組通過數字索引來訪問。

假設你還可以管理文件的創建,可以存儲你的數據在單獨命名的數組:

\index 
    \-- image001.jpg 
    \-- image002.jpg 
    ... 
\features 
    \-- image001.jpg 
    \-- image002.jpg 
    ... 

所以你可以通過名字訪問它們:

dbhdf5['features']['image001.jpg'] 

如果文件是由其他人生成的,你必須自己存儲密鑰,例如用字典:

lookup = {} 
for i, key in enumerate(dbhdf5['image_ids'][:]): 
    lookup[key] = i 

並通過此間接訪問它們

dbhdf5['index'][lookup['image001.jpg']]