2014-04-10 6 views
8

Wie kann ich ein HDF5-Array mit der h5py Python-Bibliothek Größe ändern?Wie ändere ich die Größe eines HDF5-Arrays mit `h5py`

Ich habe versucht, die .resize Methode und auf einem Array mit chunks auf True festgelegt. Ach, mir fehlt noch etwas.

In [1]: import h5py 

In [2]: f = h5py.File('foo.hdf5', 'w') 

In [3]: d = f.create_dataset('data', (3, 3), dtype='i8', chunks=True) 

In [4]: d.resize((6, 3)) 
/home/mrocklin/Software/anaconda/lib/python2.7/site-packages/h5py/_hl/dataset.pyc in resize(self, size, axis) 
--> 277   self.id.set_extent(size) 
ValueError: unable to set extend dataset (Dataset: Unable to initialize object) 

In [11]: h5py.__version__ 
Out[11]: '2.2.1' 
+0

Vielleicht hat es etwas mit dem Datentyp des Arrays zu tun ... Vielleicht einen Standard-Datentyp versuchen, wie er in der Dokumentation zur Initialisierung eines Arrays gezeigt wird? –

+0

Probier es einfach ohne dtype angegeben (ich denke, es ist standardmäßig float). Gleicher Fehler – MRocklin

+1

Vermissen Sie 'maxshape' auf' create_dataset'? – SlightlyCuban

Antwort

5

Wie von Oren erwähnt, müssen Sie maxshape verwenden, wenn die dataset Erstellen, wenn Sie später die Array-Größe geändert werden soll. eine Dimension None Einstellung ermöglicht es Ihnen, diese Dimension später zu 2 ** 64 (h5 der Grenze), um die Größe auf:

In [1]: import h5py 

In [2]: f = h5py.File('foo.hdf5', 'w') 

In [3]: d = f.create_dataset('data', (3, 3), maxshape=(None, 3), dtype='i8', chunks=True) 

In [4]: d.resize((6, 3)) 

In [5]: h5py.__version__ 
Out[5]: '2.2.1' 

Siehe docs für mehr.