2013-07-01 20 views
7

Ich versuche, Werte in einem numpy Array zu sortieren, so dass ich alle Werte speichern kann, die in einem bestimmten Bereich liegen (das könnte wahrscheinlich besser formuliert werden). Jedenfalls gebe ich ein Beispiel von dem, was ich versuche zu tun. Ich habe ein Array Bins genannt, die wie folgt aussieht:Wie werden Werte in einem numpligen Array in Klassen organisiert, die einen bestimmten Wertebereich enthalten?

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

Ich habe auch ein anderes Array genannt 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]) 

Was ich versuche zu tun, die Indexwerte des avgs Array zu finden, sind in den Bereichen zwischen den Werten des bins Arrays. Zum Beispiel habe ich versucht, eine while-Schleife zu erstellen, die neue Variablen für jedes Bin erstellen würde. Der erste Behälter würde alles sein, der zwischen bins[0] and bins[1] ist und wie folgt aussehen würde:

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

Diese Indexwerte zu den Werten entspräche 11,02, 11,3 und 11,01 in der avgs und würden die Werte von avgs sein, die zwischen Index waren Werte 0 und 1 in bins. Ich brauche auch die anderen Behälter so wäre ein weiteres Beispiel sein:

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

jedoch der schwierigste Teil dieser für mich war, dass die Größe von bins und avgs Änderungen von anderen Parametern basiert, so dass ich versuchte, etwas zu bauen, das wäre in der Lage, zu größeren oder kleineren bins und avgs Arrays erweitert werden.

Antwort

9

Numpy hat einige ziemlich mächtige Funktionen zur Zählung von Behältern.

>>> 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])