Pruebe eficientemente las filas y columnas de la matriz con numpy
Estoy tratando de eliminar tanto la fila i como la columna i cuando tanto la fila iy La columna I contiene todos los 0. Por ejemplo, en este caso podemos ver que la fila 0 es todo ceros y la columna 0 es todo ceros y, por lo tanto, la fila y la columna 0 se eliminan. Lo mismo con el par de columnas de fila 2 y 4. La fila 1 es todos ceros, pero la columna 1 no es así, tampoco se eliminan.
[0,0,0,0,0]
[0,1,0,1,0]
[0,0,0,0,0]
[0,0,0,0,0]
[0,0,0,0,0]
se convertiría
[1,1]
[0,0]
Otro ejemplo:
[0,0,1,0,0,1]
[0,0,0,0,0,0]
[0,0,0,0,0,0]
[0,0,0,0,0,0]
[0,0,0,0,0,0]
[0,0,1,0,1,0]
cambiaría a:
[0,1,0,1]
[0,0,0,0]
[0,0,0,0]
[0,1,1,0]
Este es el código que estoy usando para calcular:
def remove(matrix):
for i, x in reversed(list(enumerate(matrix))):
if np.all(matrix == 0, axis=0)[i] and np.all(matrix == 0, axis=1)[i]:
matrix = np.delete(matrix,i,axis=0)
matrix = np.delete(matrix,i,axis=1)
return matrix
Después de probar, esta línea lleva mucho tiempo:
if np.all(matrix == 0, axis=0)[i] and np.all(matrix == 0, axis=1)[i]:
¿Hay alguna forma más adecuada de probar una fila y una columna de esta manera? La matriz que estoy usando es una matriz binaria dispersa. No estoy usando ninguna clase de matriz dispersa, solo ndarray.