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

标签 python numpy pytables

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

相关文章:

python - 如何克服 'NoneType' object has no attribute 'lower' 错误?

Python 异常/ValueError/错误处理

python - 用列表理解替换循环,而不是循环获取函数以在列表理解中返回新数组

python - 防止 PyTables(在 Pandas 中)打印 "Closing remaining open files..."

python - 将大量数据附加到表 (HDF5) 数据库,其中 database.numcols != newdata.numcols?

python - 如何在单击 cli 中使用 python 日志输出日志?

python - 默认情况下禁用输入停止?

python - 使用 pandas 和 numpy 获取差异并消除间隙时间序列数据

python - 在 for 循环中使用相应的 3D numpy 数组

homebrew - 在 M1 Mac 上找不到 PyTables 的 HDF5 安装