2011-09-06 4 views
9

Possiedo un array REC di Numpy da cui vorrei eseguire alcune query rapide simili a SQL: SELECT * where array['phase'] == "P". Vorrei ottenere una matrice di registrazione come output con ogni riga corrispondente a una riga dell'array originale che soddisfa i criteri della query. Qualche idea? Sono abbastanza sicuro di averlo fatto prima, ma non riesco a ricordare la funzione.Seleziona righe da Numpy Rec Array

Grazie

rec.array([ (5295499, 2.8123965, 127.20443, 0.0, 1237680436.06, 908, -19.942589, 134.33951, 0.3888, 'P', 0.19513991), 
     (5295499, 2.8123965, 127.20443, 0.0, 1237680436.06, 1387, -18.102, 125.639, 0.11, 'P', 1.2515257), 
     (5447254, 39.025873, 143.31065, 0.0, 1245455521.85, 1512, 33.121667, 130.87833, 0.573, 'LR', 45.099504)], 
     dtype=[('eventid', '<i4'), ('eventlat', '<f8'), ('eventlon', '<f8'), ('eventdepth', '<f8'), ('eventtime', '<f8'), ('stationid', '<i4'), ('stationlat', '<f8'), ('stationlon', '<f8'), ('stationelv', '<f8'), ('phase', '|S7'), ('timeresidual', '<f8')]) 

risposta

7

Prova:

array[array['phase']=='P'] 

array['phase']=='P' restituisce una matrice NumPy booleano. Quando idx è un array booleano, array[idx] restituisce un array composto da quelle righe dove idx è True.

+1

Questo è geniale! Ma giusto per chiarire per altri ppl: l'array qui non si riferisce a numpy.array, si riferisce al nome dell'array del tuo record. Per esempio, se avessi una recla chiamata chiamata data, allora vorrei fare: data [data ['fase'] == 'P']] – Rishi

0

provare questo codice:

array[array.phase=='P']