2012-10-30 37 views
3

試圖根據numpy recarray中的一列創建一個Pytables EArray。這似乎工作,如果我使用createArray,因爲我可以簡單地通過它從recarray中提取的numpy數組。然而,對於createEArray,我需要定義原子 - 這是造成問題的原因如何爲Pytables定義原子EArray的創建

在示例中,MyRecArray是一列用於1-D數組的記錄陣列,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(....)」來創建這樣一個原子的通用方法

謝謝

回答

1

我相信使用功能:

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

將讓您足不出戶子程序路線創建一個原子。形狀包含在dtype「afieldtype」中(例如,dtype([('col1', '<f8', (10,))])

相關問題