私はnumpy配列のセットを持っています。これらのうちの1つは "キー"のリストであり、そのキーをキーにした配列の辞書に配列を再配置したいと思います。現在のコードはインデックスを持つnumpy配列を素早く変換します。インデックス上にキー配列されたnumpy配列のdictに変換します
for key, val1, val2 in itertools.izip(keys, vals1, vals2):
dict1[key].append(val1)
dict2[key].append(val2)
これはかなり遅いです。なぜなら、関係する配列は何百万ものエントリであり、これは何度も起こるからです。これをベクトル化された形式で書き直すことは可能ですか?可能なキーのセットは事前にわかっており、〜10個の別個のキーがあります。
編集: K異なるキーとリストが存在する場合のnの長さである、現在の答えはO(NK)(各キーについて一度反復)とO(N Nログ)(ソート最初)です。私はまだベクトル化されたO(n)ソリューションを探しています。これはうまくいけば可能です。結局のところ、最も簡単に可能な非ベクトル化されたもの(すなわち、私が既に持っているもの)はO(n)である。
私はパンダはこの種のもののためのツールを持っていると思いますが、あなたは純粋なnumpyのの多くの運を持っているつもりはありません。 – user2357112
@knzhou:私はO(n log n)という実装を持っていますが、10個のキーと2千万エントリでも、O(n)ソリューションよりも4倍も高速です。あなたは本当に興味がありませんか? –
10個の異なるキーがあるとします。キーのデータ型は? –