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.

Respuestas a la pregunta(2)

Su respuesta a la pregunta