2017-01-06 2 views
0

Je compare deux fichiers hdf5 différents pour m'assurer qu'ils correspondent. Je veux créer une liste avec tous les jeux de données du groupe dans le fichier hdf5 afin que je puisse avoir une boucle parcourant tous les jeux de données, au lieu de les entrer manuellement. Je ne peux pas sembler trouver loin de faire ceci. Actuellement, je reçois le jeu de données en utilisant ce code:Obtention de plusieurs jeux de données du groupe en HDF5

tdata21 = ft['/PACKET_0/0xeda9_data_0004'] 

Les noms des ensembles sont situés dans le groupe « PACKET_0 ». Une fois que je dispose de tous les ensembles de données, je compare les données dans les ensembles de données dans cette boucle:

for i in range(len(data1)): 
    print "%d\t%g\t%g" % (i, data1[i],tdata1[i]) 
    if(data1[i]!=tdata1[i]): 
    x="data file: data1 \nline:"+ str(i) + "\norgianl data:" + str(data1[i]) + "\nrecieved data:" + str(tdata1[i]) + "\n\n" 
    correct.append(x) 

S'il existe un moyen smartier de comparer hdf5 fichiers que je voudrais le voir comme volonté, mais surtout je suis juste recherche d'un moyen d'obtenir les noms de tous les jeux de données du groupe dans une liste. Merci

+0

Je sais qu'une question similaire existe dans ce post, mais je ne le comprends pas vraiment, donc si cela fonctionne pour mon cas, quelqu'un pourrait-il expliquer comment l'utiliser. [link] (http://stackoverflow.com/questions/35953404/listing-datasets-in-a-group-in-hdf5?rq=1) –

+1

Utilisez-vous h5py? Ajoutez cette étiquette. numpy aussi bien. – hpaulj

+1

http://docs.h5py.org/en/latest/high/group.html#dict-interface-and-links - sur l'accès aux éléments d'un groupe comme s'il s'agissait d'un dictionnaire, y compris l'utilisation de 'keys() ',' items() 'etc. – hpaulj

Répondre

2

Pour obtenir les ensembles de données ou les groupes qui existent dans un groupe ou un fichier HDF5, appelez simplement list() sur ce groupe ou fichier. En utilisant votre exemple, vous auriez

datasets = list(ft['/PACKET_0']) 

Vous pouvez aussi parcourir directement, en faisant:

for name, data in ft['/PACKET_0'].items(): 
    # do stuff for each dataset 

Si vous voulez comparer deux ensembles de données pour l'égalité (ils ont le même données), la façon la plus simple serait de le faire:

(dataset1.value == dataset2.value).all() 

cela renvoie des tableaux numpy de chaque ensemble de données, élément par compare éléments les tableaux, et retourne True si elles correspondent everyw ici et False sinon.

Vous pouvez combiner ces deux concepts pour comparer chaque ensemble de données dans deux fichiers différents.