Come estrarre le linee di un array, che contengono un certo valore? (NumPy, SciPy)
Domanda
Ho un array 2D NumPy e voglio per tornare coloumn c dove (r, c-1) (riga r, coloumn c) è uguale ad un certo valore (int n).
Non voglio per scorrere le righe di scrittura qualcosa di simile
for r in len(rows):
if array[r, c-1] == 1:
store array[r,c]
, perché ci sono 4000 di loro e questo array 2D è solo uno dei 20 devo guardare attraverso.
ho trovato "filtro", ma non so come usarlo (trovati n ° doc).
C'è una funzione, che fornisce un tale ricerca?
Soluzione
spero ho capito bene la tua domanda. Diciamo che si dispone di una a
array
a = array(range(7)*3).reshape(7, 3)
print a
array([[0, 1, 2],
[3, 4, 5],
[6, 0, 1],
[2, 3, 4],
[5, 6, 0],
[1, 2, 3],
[4, 5, 6]])
e si desidera estrarre tutte le righe in cui la prima voce è 2
. Questo può essere fatto in questo modo:
print a[a[:,0] == 2]
array([[2, 3, 4]])
a[:,0]
denota la prima colonna della matrice, restituisce == 2
una marcatura le voci che corrispondono a matrice booleana, e poi usiamo avanzata indicizzazione per estrarre i rispettivi file.
Naturalmente, NumPy ha bisogno di iterare su tutte le voci, ma questo sarà molto più veloce che farlo in Python.
Altri suggerimenti
array NumPy non vengono indicizzati. Se è necessario eseguire questa operazione specifica più efficientemente di quanto lineare nella dimensione della matrice, allora avete bisogno di usare qualcosa di diverso NumPy.