使用PyTable扩展HDF5中的数组

时间:2017-07-04 10:20:02

标签: 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)) ... 来处理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

1 个答案:

答案 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))