Para este caso sencillo 1D, de hecho me gustaría usar una máscara booleana:
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))])
Ahora usted puede conseguir sus valores:
included = a[mask] # array([0, 1, 2, 3])
excluded = a[~mask] # array([4, 5, 6, 7, 8, 9])
Tenga en cuenta que a[mask]
no necesariamente producen los mismos cosa como a[include_index]
ya que el orden de include_index
importa para la salida en ese escenario (debe ser aproximadamente equivalente a a[sorted(include_index)]
). Sin embargo, dado que el orden de los elementos excluidos no está bien definido, esto debería funcionar bien.
EDITAR
Una mejor manera de crear la máscara es:
mask = np.zeros(a.shape,dtype=bool)
mask[include_idx] = True
(gracias a Seberg).
¿Se trata de una operación de 1 vez? ¿O va a reutilizar 'sel_id' (y su negación) más adelante? Además, ¿le interesa el caso multidimensional o solo el caso 1D? – mgilson
En mi aplicación, funcionará en una matriz masiva multidimensional, y sí, volveré a usar sel_id. – CJLam
Acabo de darme cuenta de que mi solución anterior es INCORRECTA. Si se trata de una matriz de diez 1, el código dado dará una matriz None en lugar de una matriz de cinco 1's. – CJLam