3

numpy 再配列の 1 つの列に基づいて、実行時に Pytables EArray を作成しようとしています。createArray を使用している場合、再配列から抽出された numpy 配列を単純に渡すことができるため、これはうまくいくようです。ただし、 createEArray の場合、問題を引き起こしているアトムを定義する必要があります

この例では、MyRecArray は列の 1 次元配列を持つ recordarray であり、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)

サブルーチンルートに行かずにアトムを作成できます。形状は dtype "afieldtype" に含まれています (例: dtype([('col1', '<f8', (10,))]))

于 2013-09-18T13:59:13.533 に答える