collections.Counterは非常に遅いので、私はPython 2.7でマップされた値を合計するより速い方法を追求しています。シンプルなコンセプトのように思えますが、組み込みのCounterメソッドではうんざりです。カウンタのようなナンシーアレイの追加
基本的に、私はこのような配列を取ることができるようにする必要があります:
array([[ 0., 2.],
[ 2., 2.],
[ 3., 1.]])
array([[ 0., 3.],
[ 1., 1.],
[ 2., 5.]])
そして、彼らはこのように見えるので、それらを「追加」:
array([[ 0., 5.],
[ 1., 1.],
[ 2., 7.],
[ 3., 1.]])
良いがない場合私はこれに似た何かをすることを可能にする他のアイデアを公開しています.Numpy以外のモジュールも公開しています。
ありがとうございます!
編集:いくつかのスピードテストには対応していますか? インテルは64ビットマシンを獲得しました。次の値はすべて秒単位です。 20000ループ。
collections.Counter結果: 2.131000、2.125000、2.125000
Divakarのunion1d +マスキング結果: 1.641000、1.633000、1.625000
Divakarのunion1d +インデックスの結果: 0.625000、0.625000、0.641000
ヒストグラムの結果: 1.844000、1.938000、1.858000
のパンダ結果: 16.659000、16.686000、16.885000
結論:パンダを有効にするためにunion1d +インデックスの勝利は、配列のサイズが小さすぎると、ヒストグラムのアプローチは、そのシンプルさで私の心を吹いたが、私はよそれを作成するにはあまりにも多くのオーバーヘッドがかかります私が受け取ったすべての反応はとても良いものでした。 This is what I used to get the numbers.もう一度ありがとう!
編集:そして、同じ正確なこと(65.671000秒)にもかかわらず、Counter1.update(Counter2.elements())
を使用することはひどいことに言及する必要があります。
後で編集しました:私はこれについてたくさん考えていましたが、Numpyでの各列に最初の列がないように記入する方が効果的かもしれません。インデックスを使用するだけで済むので、複数の配列を追加するだけでなく、他の関数も簡単に作成できます。さらに、NumpyよりもPandasのほうが理にかなっています。なぜなら、0で塗りつぶす必要はなく、大きなデータセットではより効果的です(しかし、NumpyはGAEのようなより多くのプラットフォームで互換性があるという利点がありますまったく)。最後に、私がチェックした答えは、私が尋ねた正確な質問に対する最善の答えでした。私が示した方法で2つの配列を追加しました。しかし、私は必要なのは視点の変更だと思います。
なぜ結果に4行ありますか? –
結果の行は、配列のすべての最初のインデックスの和集合にあるユニークな最初のインデックスの数に等しいためです。上の配列では、上の配列だけが「2」を持ち、中央の配列のみが「3」を有するので、下の配列は2と3の両方を有する。 – Zoojay
最初の列の最大値は何ですか? –