2013-07-01 14 views
7

私はnumpy配列の値をソートしようとしていますので、特定の範囲にあるすべての値を格納できるようになりました。とにかく私は何をしようとしているかの例をあげていません。私はまた別の配列がavgsと呼ばれている数値配列の値を特定の範囲の値を含むビンに整理する方法は?

bins = array([11,11.5,12,12.5,13,13.5,14]) 

に:

avgs = array([11.02, 13.67, 11.78, 12.34, 13.24, 12.98, 11.3, 12.56, 13.95, 13.56, 
       11.64, 12.45, 13.23, 13.64, 12.46, 11.01, 11.87, 12.34, 13,87, 13.04, 
       12.49, 12.5]) 

私がやろうとしていますどのようなことをavgs配列のインデックス値を見つけることです、私はこのようになり、ビンと呼ばれる配列を持っています配列binsの値の間の範囲内にあります。たとえば、各ビンに新しい変数を作成するwhileループを作成しようとしていました。最初のビンはbins[0] and bins[1]の間にあるすべてのものだろうと次のようになります。

bin1 = array([0, 6, 15]) 

これらのインデックス値は値11.02、11.3に対応するであろう、とavgsで11.01と指数の間であったavgsの値になりますbinsの値0と1です。私にとってこの挑戦的な部分は、他のパラメータに基づいてbinsavgs変化の大きさは、私は次のようになり、何かを構築しようとしていたということでしたが

bin2 = array([2, 10, 16]) 

:私もそうもう一つの例は以下のようになり、他のビンが必要より大きいまたはより小さい配列binsおよびavgsアレイに拡大することができる。

答えて

9

Numpyにはかなり強力なビンカウント機能があります。

>>> binplace = np.digitize(avgs, bins) #Returns which bin an average belongs 
>>> binplace 
array([1, 6, 2, 3, 5, 4, 1, 4, 6, 6, 2, 3, 5, 6, 3, 1, 2, 3, 5, 7, 5, 3, 4]) 

>>> np.where(binplace == 1) 
(array([ 0, 6, 15]),) 
>>> np.where(binplace == 2) 
(array([ 2, 10, 16]),) 

>>> avgs[np.where(binplace == 1)] 
array([ 11.02, 11.3 , 11.01]) 
関連する問題