Borrar filtros
Borrar filtros

Delete the row of matrix

1 visualización (últimos 30 días)
Laura
Laura el 9 de Feb. de 2015
Comentada: Guillaume el 9 de Feb. de 2015
I want to delete multiple rows of matrix.
For example,
Matrix A contains X in the first column, and Y in the second column. Note that X and Y does not have to be a whole number .
A = [ 1.122 2.111; 1.122 2.3, etc,....]
If X values are in the interval of [1.12 -1.125] and Y values are in the interval of [2.12-2.3], then delete this row.If X is in the range but Y is not, then dont delete them. Note that I have to search the matrix A to find whether X and Y in the interval that I defined, and then delete them. From the example above, the second row needs to delete by looking at it. But I need to search them for the huge matrix which I cant use eye to find them. I need you guys helps.
Thanks.
  2 comentarios
Hikaru
Hikaru el 9 de Feb. de 2015
Editada: Hikaru el 9 de Feb. de 2015
Is this homework?
If it is, I'll give you a hint on where to start. Say you have a vector b and the condition c to determine which element will be deleted.
b = [1 2 3 0];
c = b>=3;
b(c)=[] % this will delete that element
Laura
Laura el 9 de Feb. de 2015
This is not a homework. Thanks though.

Iniciar sesión para comentar.

Respuesta aceptada

Guillaume
Guillaume el 9 de Feb. de 2015
It's fairly basic matlab matrix manipulation. Use logical indexing:
A(A(:, 1) >= 1.12 & A(:, 1) <= -1.125 & A(:, 2) >= 2.12 & A(:, 2) <= -2.3, :) = []
% A(:, 1) is your X, A(:, 2) is your Y
% A(:, 1) >= 1.12 & A(:, 1) <= -1.125 is all the rows of A for X in [1.12 -1.125] (1)
% A(:, 2) >= 2.12 & A(:, 2) <= -2.3 is all the rows of A for Y in [2.12 -2.3] (2)
% (1) & (2) is X in [1.12 -1.125] AND Y in [2.12 -2.3]
% A(condition, :) = [] remove all the rows of A that fulfill the condition
  2 comentarios
Laura
Laura el 9 de Feb. de 2015
Thanks so much Guillaume. It works fine. However, I want to ask why it does not work if I try this:
rx=find(A(:, 1) >= 1.12 & A(:, 1) <= -1.125);
ry=find(A(:, 2) >= 2.12 & A(:, 2) <= -2.3);
A(rx,ry)=[];
it gave me an error as "Subscripted assignment dimension mismatch".
Thanks again.
Guillaume
Guillaume el 9 de Feb. de 2015
You seem to be a bit confused about array indexing. In
A(rx, ry)
ry is the columns of A. You've only got two columns.
If you wanted to use your method, you'd have to do:
rx=find(A(:, 1) >= 1.12 & A(:, 1) <= -1.125);
ry=find(A(:, 2) >= 2.12 & A(:, 2) <= -2.3);
A(intersect(rx, ry), :) = [];
It's a lot more work though than:
logicalx = A(:, 1) >= 1.12 & A(:, 1) <= -1.125;
logicaly = A(:, 2) >= 2.12 & A(:, 2) <= -2.3;
A(logicalx & logicaly, :) = [];

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Matrix Indexing en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by