2013-04-25 13 views
13

Hat jemand eine Idee, hdf5-Datasets von h5py zu aktualisieren? Unter der Annahme, schaffen wir einen Datensatz wie:Aktualisierung von h5py Datasets

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") 

Ist es möglich, die dset zu einem 3x3 numpy Array zu verlängern?

Antwort

14

Sie müssen den Datensatz mit der Eigenschaft "erweiterbar" erstellen. Nach der erstmaligen Erstellung des Datasets ist dies nicht mehr möglich. Um dies zu tun, you need to use the "maxshape" keyword. Ein Wert von None im Tupel maxshape bedeutet, dass diese Dimension unbegrenzt groß sein kann. Also, wenn eine f HDF5 Datei:

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

erzeugt einen Datensatz mit einer Größe (2,2), die entlang der ersten Dimension auf unbestimmte Zeit verlängert werden kann und bis 3 entlang der zweiten. Jetzt können Sie den Datensatz mit resize erweitern:

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

Die erste Dimension kann so viel erhöht werden, wie Sie wollen:

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

Resize auch eine Achse Argument akzeptiert, so dass Sie nur die neue Größe angeben müssen für die Achse, die Sie erweitern, anstatt alle von ihnen: dset.resize (10, Achse = 0) – velotron

+0

Das ist sehr nützlich, @velotron, könnte es zur akzeptierten Antwort hinzugefügt werden, weil für mehrdimensionale Arrays ist es einfacher, dies zu tun. – gcucurull

+0

überschreibt dieses Beispiel, was zuvor in der Datei war? oder fügt es einfach den neuen Inhalt an? – user798719