2013-07-01 11 views
7

Próbuję posortować wartości w tablicy numpy, tak aby można było przechowywać wszystkie wartości, które są w pewnym zakresie (może to być prawdopodobnie lepiej sformułowane). W każdym razie źle podam przykład tego, co próbuję zrobić. Mam tablicę zwane kosze, które wygląda następująco:Jak zorganizować wartości w tablicy numpy w binach, które zawierają pewien zakres wartości?

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

Mam też inną tablicę o nazwie 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]) 

Co usiłuję zrobić jest znalezienie wartości indeksu tablicy avgs że są w zakresach między wartościami tablicy bins. Na przykład próbowałem zrobić pętlę, która tworzy nowe zmienne dla każdego pojemnika. Pierwszy bin byłoby wszystko, co jest między bins[0] and bins[1] i będzie wyglądać następująco:

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

Te wartości indeksu odpowiadałaby wartości 11,02, 11,3 i 11,01 w avgs i byłoby wartości avgs które były między indeksem wartości 0 i 1 w bins. Muszę również inne pojemniki więc kolejnym przykładem będzie:

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

Jednak trudne część to dla mnie było to, że wielkość bins i avgs zmian na podstawie innych parametrów, więc starałem się zbudować coś, co byłoby można rozszerzyć do większych lub mniejszych macierzy bins i avgs.

Odpowiedz

9

Numpy ma całkiem niezłe funkcje liczenia binów.

>>> 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]) 
Powiązane problemy