尝试基于 numpy recarray 中的一列在运行时创建 Pytables EArray。如果我使用 createArray,这似乎可行,因为我可以简单地将从 recarray 中提取的 numpy 数组传递给它。但是,对于 createEArray,我需要定义原子 - 这会导致问题
在示例中,MyRecArray 是一个带有一维列数组的记录数组,Myhdf5 是一个预定义的 Pytables 文件,而 Mynode 是该文件中的一个预定义组,EArray 叶将从该组挂起。
Myfield = MyRecArray[Colname]
afieldtype = Myfield.dtype
Myatom = tables.atom.Atom(afieldtype, (1,), -9999)
MyEarray = Myhdf5.createEArray(Mynode, Colname, Myatom, (0,))
MyEarray.append(Myfield )
MyEarray.flush()
MyEarray.close()
使用此代码会出现错误:
NotImplementedError: ``Atom`` is an abstract class;
please use one of its subclasses
我可能可以根据数组时间编写一个带有 case 语句的子例程并传回一个原子,但我只是想知道是否有一种通用的方法来创建这样一个原子,方法是将要创建的数组类型传递给它而不是必须为不同的数据类型调用特定的函数,例如“tables.atom.FloatAtom(....)”
谢谢
最佳答案
我相信使用函数:
tables.Atom.from_dtype(afieldtype, dflt=-9999)
将允许您创建一个原子而无需走子程序路线。形状包含在数据类型“afieldtype”中(例如 dtype([('col1', '<f8', (10,))])
)
关于python - 如何为 Pytables EArray 创建定义原子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13142245/