2

膨大な数のエントリがあり、すべてが浮動小数点数です。これらのデータxには、反復子を使用してアクセスできます。10<y<=20、、などの選択を使用してすべてのエントリを分類する必要があります。他のイテラブルからのデータは20<y<=50どこにありますか。yエントリー数は、セレクション数よりもはるかに多いです。最後に、次のような辞書が必要です。

{ 0: [all events with 10<x<=20],
  1: [all events with 20<x<=50], ... }

または似たようなもの。たとえば、私はやっています:

for x, y in itertools.izip(variable_values, binning_values):
    thebin = binner_function(y)
    self.data[tuple(thebin)].append(x)

一般的yには多次元です。

これは非常に遅いです。numpy を使用するなど、より高速なソリューションはありますか? 問題は、list.append私が使用している方法に起因するものであり、binner_function

4

2 に答える 2

3

numpy で割り当てを取得する簡単な方法は、次を使用することnp.digitizeです。

http://docs.scipy.org/doc/numpy/reference/generated/numpy.digitize.html

結果の割り当てをグループに分割する必要があります。xoryが多次元の場合、最初に配列を平坦化する必要があります。次に、一意のビン割り当てを取得し、それらを組み合わせて反復処理して、割り当てnp.whereをグループに分割します。ビンの数がビン化する必要がある要素の数よりもはるかに少ない場合、これはおそらく高速になります。

特定の問題について微調整/詳細化する必要があるやや些細な例として(ただし、うまくいけば、numpy ソリューションを使い始めるのに十分です):

In [1]: import numpy as np

In [2]: x = np.random.normal(size=(50,))

In [3]: b = np.linspace(-20,20,50)

In [4]: assign = np.digitize(x,b)

In [5]: assign
Out[5]: 
array([23, 25, 25, 25, 24, 26, 24, 26, 23, 24, 25, 23, 26, 25, 27, 25, 25,
       25, 25, 26, 26, 25, 25, 26, 24, 23, 25, 26, 26, 24, 24, 26, 27, 24,
       25, 24, 23, 23, 26, 25, 24, 25, 25, 27, 26, 25, 27, 26, 26, 24])

In [6]: uid = np.unique(assign)

In [7]: adict = {}

In [8]: for ii in uid:
   ...:     adict[ii] = np.where(assign == ii)[0]
   ...:     

In [9]: adict
Out[9]: 
{23: array([ 0,  8, 11, 25, 36, 37]),
 24: array([ 4,  6,  9, 24, 29, 30, 33, 35, 40, 49]),
 25: array([ 1,  2,  3, 10, 13, 15, 16, 17, 18, 21, 22, 26, 34, 39, 41, 42, 45]),
 26: array([ 5,  7, 12, 19, 20, 23, 27, 28, 31, 38, 44, 47, 48]),
 27: array([14, 32, 43, 46])}

numpy 配列の平坦化と非平坦化の処理については、http: //docs.scipy.org/doc/numpy/reference/generated/numpy.unravel_index.htmlを参照してください。

http://docs.scipy.org/doc/numpy/reference/generated/numpy.ravel_multi_index.html

于 2012-05-21T14:41:15.800 に答える
0

np.searchsortedあなたの友達です。同じトピックに対する別の回答のどこかで読んだように、現在、デジタル化よりもかなり高速で、同じ仕事をしています。

http://docs.scipy.org/doc/numpy/reference/generated/numpy.searchsorted.html

于 2013-01-13T12:58:01.737 に答える