Eliminar elementos de matriz en Python mientras realiza un seguimiento de su posición
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!
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])