2013-07-01 15 views
7

我想排序numpy數組中的值,以便我可以存儲所有在特定範圍內的值(這可能表達得更好)。無論如何,生病就是我想要做的一個例子。我有一個數組稱爲垃圾箱,看起來像這樣:如何將numpy數組中的值組織爲包含一定範圍的值的bin?

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

我也叫另一個數組avgs:

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循環,爲每個bin創建新的變量。第一倉將是一切,是bins[0] and bins[1]之間會是什麼樣子:

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

這些指標值將對應值11.02,11.3,並在avgs 11.01和將是avgs這是指數的值值爲0和1在bins。我還需要其它倉使另一個例子是:

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

但是這對我來說是挑戰性的部分是的binsavgs變化基於其他參數,所以我試圖建立自己的東西,這將是大小能夠擴大到更大或更小的陣列。

回答

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]) 
相關問題