假设我有一个PyTables描述类:
In [1]: import tables as tb
class DataDescr(tb.IsDescription):
timestamp = tb.Time64Col(pos=0)
value_b = tb.Float32Col(pos=2)
现在我动态地分配value_a
。我需要这样做,因为此列的形状取决于一些用户输入。你知道吗
In [2]: DataDescr.value_a = tb.Float32Col(pos=1, shape=given_shape)
但是当查看使用此描述创建的表时,我看不到新列。你知道吗
In [3]: h5file = tb.open_file('goodstuff.h5', mode='w')
table = h5file.create_table('/', 'data', DataDescr)
table
Out[3]: /data (Table(0,)) ''
description := {
"timestamp": Time64Col(shape=(), dflt=0.0, pos=0),
"value_b": Float32Col(shape=(), dflt=0.0, pos=1)}
byteorder := 'little'
chunkshape := (5461,)
我怎样才能解决这个问题?你知道吗
这有几个选项(参见^{} )。你知道吗
选项1:使用
IsDescription.columns
添加类属性IsDescription
对象有一个columns
属性,该属性在字典中存储列信息,可用于动态赋值。在问题中,从一个基本完整的类开始。。。你知道吗…然后添加缺少的属性。你知道吗
选项2:使用字典描述
与其说是类描述,不如从字典描述开始。。。你知道吗
…然后在字典中添加一个条目。你知道吗
选项3:一次创建NumPy数据类型描述
由于NumPy数据类型不支持项分配,因此此方法要求一次创建所有描述。如果这是一个问题,选项1和2可用。你知道吗
[可能很危险]选项4:修改dict条目的形状
我将提到最后一个选项,它不一定得到支持。因此,最好远离这个选项。你知道吗
在开始使用没有指定大小的完整词典之后。。。你知道吗
…修改
'value_a'
项的形状。你知道吗注意:这不适用于类描述,原因我不知道。
结果:
相关问题 更多 >
编程相关推荐