2017-07-04 1 views
0

ich normalerweise h5py verwenden, um die HDF5 Sachen in Python zu tun, und wenn ich einen Datensatz erstellt werden soll, die ich später oder erweitern wollen, ich mache:in HDF5 Erweiterung Array PyTables

f = h5py.File('foo.h5', 'w') 
d = f.create_dataset('whatever', (5, 5), maxshape=(None, 5), dtype='i8', chunks=True) 
... 
d.resize((23, 5)) 
... 

Die maxshape(None, ...) setzt die erste Dimension zu "Unendlichkeit", so dass es erweiterbar ist.

Jetzt habe ich ein Projekt, wo ich bei PyTables bleiben muss und wollte große Arrays Schritt für Schritt aufbauen. Gibt es eine Möglichkeit, arrays in PyTables zu erweitern? Diese

ist in etwa die Idee:

import tables as tb 
import numpy as np 

filename = "foo.h5" 
h5file = tb.File(filename, "a") 

gbar = h5file.create_group(h5file.root, "bar", "Pressure") 
h5file.create_array(gbar, 'left', np.array((1, 2, 3, 4)), "...") 

# now extend the shape of (4,) and append more arrays iteratively??? 

h5file.close() 

Antwort

0

ich die Lösung in der Dokumentation gefunden: tables.EArray

http://www.pytables.org/usersguide/libref/homogenous_storage.html#earrayclassdescr

Hier ist ein anschauliches Beispiel-Code, der zwei "Säulen", ergänzt mit zwei verschiedenen Wege von dtype Definition. Der with Block kann mehrfach aufgerufen werden und erweitert die Spalten:

import tables as tb 
import numpy as np 

filename = 'foo.h5' 

with tb.File(filename, "a") as f:   
    if "/foo" not in f: 
     group = f.create_group("/", 'foo', 'Foo Information') 
    else: 
     group = f.root.foo 

    if "col1" not in group: 
     a = tb.Atom.from_dtype(np.dtype('<f8'), dflt=0.0) 
     arr = f.create_earray(group, 'col1', a, (0,), "Bar") 
    else: 
     arr = getattr(group, "col1") 

    arr.append(np.arange(10)) 
    arr.append(np.arange(40, 45)) 

    if "col2" not in group: 
     b = tb.Int64Atom() 
     arr = f.create_earray(group, 'col2', b, (0,), "Baz") 
    else: 
     arr = getattr(group, "col") 

    arr.append(np.arange(7)) 
    arr.append(np.arange(30, 38)) 
Verwandte Themen