3

尝试基于 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(....)”

谢谢

4

1 回答 1

1

我相信使用该功能:

tables.Atom.from_dtype(afieldtype, dflt=-9999)

将允许您在不走子程序路线的情况下创建原子。形状包含在数据类型“afieldtype”中(例如dtype([('col1', '<f8', (10,))])

于 2013-09-18T13:59:13.533 回答