2013-07-01 20 views
7

Sto cercando di ordinare i valori in un array numpy in modo da poter memorizzare tutti i valori che si trovano in un determinato intervallo (che potrebbe probabilmente essere migliorato in termini di frasi). Ad ogni modo, malato, diamo un esempio di ciò che sto cercando di fare. Ho un array chiamato bidoni che assomiglia a questo:Come organizzare i valori in una matrice numpy in bin che contengono un certo intervallo di valori?

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

ho anche un altro array chiamato 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]) 

Quello che sto cercando di fare è di trovare i valori degli indici dell'array avgs che sono compresi nell'intervallo tra i valori dell'array bins. Ad esempio, stavo cercando di creare un ciclo while che creava nuove variabili per ogni bin. Il primo bidone sarebbe tutto ciò che è compreso tra bins[0] and bins[1] e sarebbe simile:

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

Quei valori dell'indice corrisponderebbero ai valori 11.02, 11.3, e 11.01 nel avgs e sarebbero i valori di avgs che erano tra l'indice valori 0 e 1 in bins. Ho anche bisogno gli altri bidoni quindi un altro esempio potrebbe essere:

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

Tuttavia, la parte difficile di questo per me era che la dimensione della bins e avgs modifiche sulla base di altri parametri in modo che stavo cercando di costruire qualcosa che sarebbe in grado di essere esteso a più grandi o più piccoli bins e avgs matrici.

risposta

9

Numpy ha alcune funzioni di conteggio dei contenitori piuttosto potenti.

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