Per questo semplice caso 1D, mi piacerebbe davvero utilizzare una maschera booleano:
a = numpy.arange(10)
include_index = numpy.arange(4)
include_idx = set(include_index) #Set is more efficient, but doesn't reorder your elements if that is desireable
mask = numpy.array([(i in include_idx) for i in xrange(len(a))])
Ora è possibile ottenere i vostri valori:
included = a[mask] # array([0, 1, 2, 3])
excluded = a[~mask] # array([4, 5, 6, 7, 8, 9])
Nota che a[mask]
non necessariamente produrrà gli stessi cosa come a[include_index]
poiché l'ordine di include_index
è importante per l'output in tale scenario (dovrebbe essere approssimativamente equivalente a a[sorted(include_index)]
). Tuttavia, poiché l'ordine degli elementi esclusi non è ben definito, questo dovrebbe funzionare Ok.
EDIT
Un modo migliore per creare la maschera è:
mask = np.zeros(a.shape,dtype=bool)
mask[include_idx] = True
(grazie a seberg).
È un'operazione una volta sola? O riutilizzerai 'sel_id' (ed è la negazione) lungo la strada? Inoltre, ti interessa il caso multidimensionale o solo il caso 1D? – mgilson
Nella mia applicazione, sarà operato su un array multi-dimensionale, e sì, riutilizzerò sel_id. – CJLam
Ho appena realizzato che la mia soluzione sopra è SBAGLIATA. Se è una matrice di dieci 1, allora il codice dato darà una matrice None invece di una matrice di cinque 1. – CJLam