gpt4 book ai didi

python - 如何为 Pytables EArray 创建定义原子

转载 作者:行者123 更新时间:2023-11-28 18:51:01 26 4
gpt4 key购买 nike

尝试基于 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com