5

createTable() の呼び出しのスキーマ定義にディクショナリまたはクラスの両方を使用する場合、PyTable の列はアルファベット順に並べられているようです。特定の順序を確立し、numpy.genfromtxt() を使用してテキストからデータを読み取って保存する必要があります。私のテキスト ファイルには、PyTable の場合のように変数名がアルファベット順に含まれていません。

たとえば、テキスト ファイルの名前が mydata.txt で、次のように構成されているとします。

time(row1) bVar(row1) dVar(row1) aVar(row1) cVar(row1)

time(row2) bVar(row2) dVar(row2) aVar(row2) cVar(row2) ...

time(rowN) bVar(rowN) dVar(rowN) aVar(rowN) cVar(rowN)

したがって、必要なのは、これらの列で順序付けされたテーブルを作成し、numpy.genfromtxt コマンドを使用してテーブルにデータを入力することです。

# Column and Table definition with desired order
class parmDev(tables.IsDescription):
    time = tables.Float64Col()
    bVar = tables.Float64Col()
    dVar = tables.Float64Col()
    aVar = tables.Float64Col()
    cVar = tables.Float64Col()

#...

mytab = tables.createTable( group, tabName, paramDev )

data = numpy.genfromtxt(mydata.txt)
mytab.append(data)

これは単純なコードであり、非常に高速であるため、望ましいものです。ただし、PyTable の列は常にアルファベット順に並べられ、追加されたデータは目的の順序に従って並べられます。ここで基本的なものが欠けていますか?テーブルの列の順序をアルファベット順ではなくクラス定義の順序にする方法はありますか?

4

1 に答える 1

10

はい、いくつかの異なる方法でテーブルの順序を定義できます。最も簡単な方法はpos、各列のパラメーターを使用することです。Colクラスのドキュメントを参照してください。

http://pytables.github.io/usersguide/libref/declarative_classes.html#the-col-class-and-its-descendants

あなたの例では、次のようになります。

class parmDev(tables.IsDescription):
    time = tables.Float64Col(pos=0)
    bVar = tables.Float64Col(pos=1)
    dVar = tables.Float64Col(pos=2)
    aVar = tables.Float64Col(pos=3)
    cVar = tables.Float64Col(pos=4)

お役に立てれば

于 2010-12-08T17:03:21.880 に答える