¿Cómo obtengo todos los valores de una matriz NumPy excluyendo un índice determinado?

Tengo una matriz NumPy, y quiero recuperar todos los elementos excepto un cierto índice. Por ejemplo, considere la siguiente matriz

a = [0,1,2,3,4,5,5,6,7,8,9] 

Si especifico el índice 3, entonces el resultado debe ser

 a = [0,1,2,4,5,5,6,7,8,9] 

Al igual que cambiar el tamaño, eliminar elementos de una matriz numpy es una operación lenta (especialmente para matrices grandes, ya que requiere la asignación de espacio y la copia de todos los datos de la matriz original a la nueva matriz). Debe evitarse si es posible.

A menudo, puedes evitarlo trabajando con una matriz enmascarada . Por ejemplo, considere la matriz a :

 import numpy as np a = np.array([0,1,2,3,4,5,5,6,7,8,9]) print(a) print(a.sum()) # [0 1 2 3 4 5 5 6 7 8 9] # 50 

Podemos enmascarar su valor en el índice 3 y realizar una sum que ignora los elementos enmascarados :

 a = np.ma.array(a, mask=False) a.mask[3] = True print(a) print(a.sum()) # [0 1 2 -- 4 5 5 6 7 8 9] # 47 

Las matrices enmascaradas también admiten muchas operaciones además de la sum .

Si realmente lo necesita, también es posible eliminar elementos enmascarados utilizando el método compressed :

 print(a.compressed()) # [0 1 2 4 5 5 6 7 8 9] 

pero como se mencionó anteriormente, evitarlo si es posible.

 a_new = np.delete(a, 3, 0) 

3 aquí está el índice que desea eliminar, 0 es el eje (cero en este caso si usa una matriz 1D). Ver np.delete

Aquí hay una sola línea si a es una matriz numpy:

 >>> a[np.arange(len(a))!=3] array([0, 1, 2, 4, 5, 5, 6, 7, 8, 9]) 

Esto debería hacerlo:

 In [9]: np.hstack((a[:3], a[4:])) Out[9]: array([0, 1, 2, 4, 5, 5, 6, 7, 8, 9]) 

Si el rendimiento es un problema, lo siguiente lo hará en su lugar:

 In [22]: a[3:-1] = a[4:]; a = a[:-1] 

Otra solución es usar la función concatenar de numpy.

 >>> x = np.arange(0,10) array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) >>> i = 3 >>> np.concatenate((x[:i],x[(i+1):])) array([0, 1, 2, 4, 5, 6, 7, 8, 9])