Come estrarre le linee di un array, che contengono un certo valore? (NumPy, SciPy)

StackOverflow https://stackoverflow.com/questions/4239586

  •  26-09-2019
  •  | 
  •  

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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top