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)