2013-04-25 13 views
13

non uno ha un'idea per aggiornare i set di dati HDF5 da h5py? Supponendo creiamo un set di dati come:Aggiornamento dataset h5py

import h5py 
import numpy 
f = h5py.File('myfile.hdf5') 
dset = f.create_dataset('mydataset', data=numpy.ones((2,2),"=i4")) 
new_dset_value=numpy.zeros((3,3),"=i4") 

E 'possibile estendere la DSET a una matrice 3x3 numpy?

risposta

14

È necessario creare il set di dati con la proprietà "estensibile". Non è possibile cambiarlo dopo la creazione iniziale del set di dati. Per fare questo, you need to use the "maxshape" keyword. Un valore di None nella tupla maxshape significa che quella dimensione può essere di dimensioni illimitate. Quindi, se f è un file HDF5:

dset = f.create_dataset('mydataset', (2,2), maxshape=(None,3)) 

crea un set di dati di dimensioni (2,2), che può essere prorogato a tempo indeterminato lungo la prima dimensione e al 3 lungo la seconda. Ora, è possibile estendere il set di dati con resize:

dset.resize((3,3)) 
dset[:,:] = np.zeros((3,3),"=i4") 

La prima dimensione può essere aumentata tanto quanto vi piace:

dset.resize((10,3)) 
+5

ridimensionamento accetta anche un argomento asse modo da avere solo per specificare le nuove dimensioni per l'asse si sta estendendo, piuttosto che tutti loro: dset.resize (10, asse = 0) – velotron

+0

Questo è molto utile @velotron, potrebbe essere aggiunto alla risposta accettata perché per gli array multidimensionali è più facile farlo. – gcucurull

+0

questo esempio sovrascrive quello che era precedentemente nel file? o aggiunge solo i nuovi contenuti? – user798719