Eliminar elementos de matriz en Python mientras realiza un seguimiento de su posición

StackOverflow https://stackoverflow.com/questions/1624395

  •  06-07-2019
  •  | 
  •  

Pregunta

Tengo dos arreglos numpy. La primera matriz contiene algunos ceros (que se distribuyen aleatoriamente a lo largo de la matriz), que me gustaría eliminar.

Mi problema es que también me gustaría eliminar las entradas de la segunda matriz en las posiciones de índice donde los primeros elementos de la matriz son cero.

Solo se me ocurrió un for-loop muy engorroso. ¿Alguien tiene un " elegante " método para hacer esto?

¡Gracias!

¿Fue útil?

Solución

¿Es lo que quieres? Soy un novato NumPy.

In [1]: import numpy as np

In [2]: a = np.array([1,2,0,3,0,4])

In [3]: b = np.array([1,2,3,4,5,6])

In [4]: b[np.where(a)]  
Out[4]: array([1, 2, 4, 6])

In [5]: np.where(a)  
Out[5]: (array([0, 1, 3, 5]),)

In [6]: a[np.where(a)]  
Out[6]: array([1, 2, 3, 4])

Otros consejos

Puede usar la indexación booleana. x! = 0 le da una matriz booleana con True donde x! = 0 false donde x == 0. Si indexa x o y con esta matriz (es decir, x_nozeros = x [x! = 0]), obtendrá solo los elementos donde x! = 0. por ejemplo:

In [1]: import numpy as np
In [2]: x = np.array([1,2,0,3,0,4])
In [3]: y = np.arange(1,7)
In [4]: indx = x!=0
In [5]: x_nozeros = x[indx]
In [6]: y_nozeros = y[indx]
In [7]: x_nozeros
Out[7]: array([1, 2, 3, 4])
In [8]: y_nozeros
Out[8]: array([1, 2, 4, 6])
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top