Ci può essere un modo più semplice, ma questo è il modo che ci si andare a farlo, per quanto ne so:
import numpy as np
import tables
# Generate some data
x = np.random.random((100,100,100))
# Store "x" in a chunked array...
f = tables.openFile('test.hdf', 'w')
atom = tables.Atom.from_dtype(x.dtype)
ds = f.createCArray(f.root, 'somename', atom, x.shape)
ds[:] = x
f.close()
Se si desidera specificare la compressione da utilizzare, dare un'occhiata a tables.Filters
. Per esempio.
import numpy as np
import tables
# Generate some data
x = np.random.random((100,100,100))
# Store "x" in a chunked array with level 5 BLOSC compression...
f = tables.openFile('test.hdf', 'w')
atom = tables.Atom.from_dtype(x.dtype)
filters = tables.Filters(complib='blosc', complevel=5)
ds = f.createCArray(f.root, 'somename', atom, x.shape, filters=filters)
ds[:] = x
f.close()
C'è probabilmente un modo più semplice per un sacco di questo ... Non ho usato pytables
per altro che i dati della tabella, come in un lungo tempo.
Nota: con pytables 3.0, f.createCArray
è stato rinominato f.create_carray
. Si può anche accettare la matrice direttamente, senza specificare la atom
,
f.create_carray('/', 'somename', obj=x, filters=filters)
fonte
2012-01-12 22:45:58
Onestamente, se si sta memorizzare un sacco di solo verso l'alto array ND, si sta meglio con 'h5py' invece di' pytables'. È semplice come 'f.create_dataset ('name', data = x)' dove 'x' è la tua matrice numpy e' f' è il file hdf aperto. Fare la stessa cosa in 'pytables' è possibile, ma considerevolmente più difficile. –
Joe, +1. Stavo per pubblicare un commento quasi identico. –
Ho pensato a questo, ma pytables ha alcune funzionalità (tabelle.expr) per eseguire calcoli direttamente sugli array, posso averli con h5py? – scripts