2016-04-01 10 views
8

è possibile eliminare un oggetto da una matrice numpy senza conoscere l'indice dell'oggetto ma conoscendo invece l'oggetto stesso?Come eliminare un oggetto da una matrice numpy senza conoscere l'indice

ho visto che è possibile utilizzare l'indice dell'oggetto utilizzando la funzione di np.delete, ma io sto cercando un modo per farlo avere l'oggetto ma non il suo indice

esempio:

[a, b, c, d, e, f]

x = e

vorrei cancellare x

thx in anticipo

risposta

12

È possibile trovare i indice/indici l'oggetto utilizzando np.argwhere, e quindi eliminare l'oggetto (s) utilizzando np.delete.

Esempio:

x = np.array([1,2,3,4,5]) 
index = np.argwhere(x==3) 
y = np.delete(x, index) 
print(x, y) 
+0

molto, questo mi ha reso la vita più facile! :) – MhmdMnsr

2

indicizzazione booleana o mascheratura è un buon modo di base di selezione, o rimuovere elementi specifici di un array

si parla di rimozione di un 'oggetto' specifico. Prendiamo letteralmente e definire una serie di DTYPE oggetto:

In [2]: x=np.array(['a','b','c','d','e'],dtype=object) 
In [3]: x 
Out[3]: array(['a', 'b', 'c', 'd', 'e'], dtype=object) 
In [4]: x=='d' # elements that equal 'd' 
Out[4]: array([False, False, False, True, False], dtype=bool) 
In [5]: x!='d' # elements that don't 
Out[5]: array([ True, True, True, False, True], dtype=bool) 
In [6]: x[x!='d'] # select a subset 
Out[6]: array(['a', 'b', 'c', 'e'], dtype=object) 

Dietro le quinte argwhere e delete uso questo. Si noti che argwhere utilizza l'array booleano x==d convertendolo in indici di array. E la costruzione di una maschera come questa è un modo operativo da delete.

Ci sono alcuni limiti importanti:

  • che l'uguaglianza (o non uguaglianza) prova deve lavorare per i vostri valori. Potrebbe non essere se gli elementi sono galleggianti.

  • L'eliminazione da un array 1d è più semplice che da un 2d (o più grande). Con 2d devi decidere se eliminare una riga, una colonna o un elemento (e nel processo che appiattisce l'array).

  • L'eliminazione di un solo elemento di tali corrispondenze è un po 'più complicata.

Per alcuni casi potrebbe essere preferibile a .tolist() la matrice e utilizzare un metodo di elenco.

In [32]: xl=x.tolist() 
In [33]: xl.remove('d') 
In [34]: np.array(xl,dtype=object) 
Out[34]: array(['a', 'b', 'c', 'e'], dtype=object) 

Non esiste un equivalente esatto a list.remove per gli array.

5

lanciarla come una matrice NumPy, e c'è un molto semplice trucco:

x = np.array(list("abcdef")) 

x = x[x!='e'] # <-- THIS IS THE TRICK 

print x 
# array(['a', 'b', 'c', 'd', 'f']) 

non deve essere più complicato di così.

+0

Questo in realtà non risolve il problema dell'eliminazione del valore. – MANA624

+0

Ti riferisci al fatto che non sto effettivamente inserendo x [x! = 'E'] nella variabile x? –

+0

Non "Per favore ..." me. Era solo un suggerimento. – MANA624

Problemi correlati