web-dev-qa-db-fra.com

Comment remplacer un tableau dans un fichier h5 à l'aide de h5py

J'essaie d'écraser un tableau numpy qui est une petite partie d'un fichier h5 assez compliqué.

J'extrais un tableau, je change certaines valeurs, puis je veux réinsérer le tableau dans le fichier h5.

Je n'ai aucun problème à extraire le tableau qui est imbriqué.

f1 = h5py.File(file_name,'r')
X1 = f1['meas/frame1/data'].value
f1.close()

Ma tentative de code ressemble à ceci sans succès:

f1 = h5py.File(file_name,'r+')
dset = f1.create_dataset('meas/frame1/data', data=X1)
f1.close()

Pour vérifier la santé mentale, j'ai exécuté cela dans Matlab en utilisant le code suivant, et cela a fonctionné sans problème.

h5write(file1, '/meas/frame1/data', X1);

Quelqu'un a-t-il des suggestions pour réussir?

29
user3508433

Vous souhaitez affecter des valeurs, pas créer un jeu de données:

f1 = h5py.File(file_name, 'r+')     # open the file
data = f1['meas/frame1/data']       # load the data
data[...] = X1                      # assign new values to data
f1.close()                          # close the file

Pour confirmer que les modifications ont été correctement effectuées et enregistrées:

f1 = h5py.File(file_name, 'r')
np.allclose(f1['meas/frame1/data'].value, X1)
#True
26
askewchan

réponse de askewchan décrit la façon de le faire (vous ne pouvez pas créer un ensemble de données sous un nom qui existe déjà, mais vous pouvez bien sûr modifier les données de l'ensemble de données). Notez cependant que l'ensemble de données doit avoir la même forme que les données (X1) vous y écrivez. Si vous souhaitez remplacer l'ensemble de données par un autre ensemble de données de forme différente, vous devez d'abord le supprimer:

del f1['meas/frame1/data']
dset = f1.create_dataset('meas/frame1/data', data=X1)
24
weatherfrog