2016-11-18 4 views
0

Ich habe eine hdf5-Datenbank mit 3 Schlüsseln (Funktionen, Bild_IDs, Index). Die image_ids und der Index haben jeweils 1000 Einträge.Abrufen von hdf5 Index gegeben Literal Name

Das Problem ist, während ich den 10. image_ids über bekommen kann:

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

Ich will das Gegenteil tun, das heißt, den Index finden, indem Sie die Bildnamen übergeben. Etwas wie:

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

ich jede Variation versucht habe ich mir vorstellen kann, aber kann nicht scheinen, einen Weg zu finden, den Index eines Bildes abzurufen, da es id. Ich bekomme Fehler wie 'Feldname nur für Verbindungstypen erlaubt'

+0

Bitte geben Sie weitere Einzelheiten darüber, wie die hdf5-Tabelle gespeichert ist, und welche Pakete Sie verwenden, um darauf zuzugreifen. Antworten auf diese Frage [http://stackoverflow.com/questions/1686869/searching-a-hdf5-dataset] schlägt vor, dass HDF5 nicht direkt durchsuchbar ist. Vielleicht wäre es besser, SQLite zum Speichern und Abrufen zu verwenden? – Neapolitan

Antwort

0

Was Sie versuchen, ist nicht möglich. HDF5 funktioniert durch Speichern von Arrays, auf die über numerische Indizes zugegriffen wird.

der Annahme, dass Sie auch die Erstellung der Datei verwalten, können Sie Ihre Daten in separaten benannte Arrays gespeichert werden:

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

So können Sie sie über Namen zugreifen:

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

Wenn die Dateien Werden sie von einer anderen Person generiert, müssen Sie die Schlüssel selbst speichern, z. B. mit einem Diktat:

und Zugriff über diese Indirektion

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