我通常使用f = h5py.File('foo.h5', 'w')
d = f.create_dataset('whatever', (5, 5), maxshape=(None, 5), dtype='i8', chunks=True)
...
d.resize((23, 5))
...
来处理Python中的HDF5内容,如果我想创建一个我想稍后扩展的数据集,我会这样做:
maxshape(None, ...)
arrays
将第一个维度设置为"无穷大",因此它可以扩展。
现在我有一个项目,我需要坚持使用PyTables,并希望逐步构建大型数组。有没有办法在PyTables中扩展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()
?
这大致是这个想法:
fold all
答案 0 :(得分:0)
我在文档中找到了解决方案:tables.EArray
http://www.pytables.org/usersguide/libref/homogenous_storage.html#earrayclassdescr
这是一个描述性的示例代码,它添加了两个"列"有两种不同的dtype
定义方式。可以多次调用with
块,它将扩展列:
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))