0

テーブルの行を返すジェネレータがあるとします。次のように使用できるもの:

for (labels, value) in rows:
    pass

「ラベル」の長さは n で、簡単にするためにすべて文字列であると言います。「値」は、フロートのような数値です。

ラベルをハッシュし、ラベルの値をインデックスにマップする方法を示す n 次元の値の配列と n 個のリストで終わる、高速で最適な方法、または組み込みの方法はありますか? これを再配列に保存できると思いますか?私はいつもこれをやっていますが、それはいつもちょっとした使い捨てのコードになってしまいます。もっと再利用可能なものを見つけたり、作成したりしたいと思います。

またはのいずれか(('here', 'there', 'nowhere'), 1.234)にマッピングされることで非常に満足し ます(そして、各次元の軸の下にラベルが付けられた対応するリストがあります。)results['here']['there']['nowhere'] = 1.234results[12,3,45] = 1.234

おそらくジェネレーター変換をスパース形式に記述して scipy を使用することもできますが、これは比較的単純なことを行うには厄介な方法のように思えます。

似たような質問がたくさんありますが、この質問に正確に答えるものはありません。多分私は検索フレーズを見逃しています。

4

1 に答える 1

0

構造化配列を使用してみることができます:

result = np.fromiter(your_generator, dtype=[('labels', '|S10'), ('value', float)])

ndarrayとしてラベルを取得できますresult['labels'](もちろん、値はとして取得できますresult['value'])。

次のように、複数のエントリを同じラベルに保存できることに注意してください (常に同じ番号を使用している場合)。

result = np.array([(('a','b','c'), 1.23),(('a','c','d'), 2.34)],
                  dtype=[('label', ("|S10", 3)), ('value', float)])

ここで、個々のレコードはタプルとして与えられ、レコードの 3 つの「ラベル」自体がタプルとして与えられます。調整された dtype を使用して、各「ラベル」に個別に名前を付けることもできます。次に例を示します。

 dtype=[('label',[('A','|S10'),('B','|S10'),('C','|S10')]),('value',float)]

このようにして、すべてにアクセスできAますresult['label']['A']...

于 2012-10-01T20:51:50.913 に答える