Saltar al contenido

Eliminar columnas y filas de ceros de una matriz matlab

Solución:

Una sola línea de código sería:

A=A(any(X,2),any(X,1))

No hay necesidad de usar find como hiciste, puedes indexar directamente usando vectores lógicos.

1 dimensión:

Primero mostraré un ejemplo más simple basado en otra pregunta duplicada, pidiendo que se elimine solo el filas que contiene elementos de ceros.

Dada la matriz A=[1,2;0,0];

Para eliminar las filas de 0, usted puede:

  • Suma el valor absoluto de cada fila (para evitar tener una suma cero de una combinación de números negativos y positivos), lo que te da un vector de columna de las sumas de las filas.

  • mantenga el índice de cada línea donde la suma sea distinta de cero.

en codigo:

A=[1,2;0,0];
% sum each row of the matrix, then find rows with non-zero sum
idx_nonzerolines = sum(abs(A),2)>0 ;
% Create matrix B containing only the non-zero lines of A
B = A(idx_nonzerolines,:) ;

dará salida:

>> idx_nonzerolines = sum(abs(A),2)>0
idx_nonzerolines =
     1
     0
>> B = A(idx_nonzerolines,:)
B =
     1     2

2 dimensiones:

El mismo método se puede utilizar para 2 dimensiones:

A=[ 1,2,0,4;
    0,0,0,0;
    1,3,0,5];

idx2keep_columns = sum(abs(A),1)>0 ;
idx2keep_rows    = sum(abs(A),2)>0 ;

B = A(idx2keep_rows,idx2keep_columns) ;

salidas:

>> B = A(idx2keep_rows,idx2keep_columns)
B =
     1     2     4
     1     3     5

Gracias a @Adriaan en los comentarios por detectar el caso de borde;)

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *