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.
molto, questo mi ha reso la vita più facile! :) – MhmdMnsr