Clear Filters
Clear Filters

Removing rows in a matrix

4 views (last 30 days)
Chris Dan
Chris Dan on 19 Oct 2020
Commented: Ameer Hamza on 20 Oct 2020
I have this matrix, called A matrix. I am attaching the file with the question. Also the picture of some of its data values
I need to remove some of its rows in a loop. I want to keep rows 1,2 then remove 3,4,5,6, keep 7,8,then remove 9,10,11,12, keep 13,14.. like this it goes on.keep 2 remove 4 rows.
Does anyone know?

Accepted Answer

Ameer Hamza
Ameer Hamza on 19 Oct 2020
Try this
n = size(Identify_3);
idx = (mod((1:n)-1, 6)+1) <= 2;
Identify_3 = Identify_3(idx, :);
Chris Dan
Chris Dan on 19 Oct 2020
Edited: Chris Dan on 19 Oct 2020
Can you also tell about this matrix:
How can i edit your code to keep the rows 1.48,96,144,192 and so on, basically after the first row, we take 48th row and then double 49+48=96 and so on...
Also if I want to change your code for the original matrix, what should I change?
Ameer Hamza
Ameer Hamza on 20 Oct 2020
You can do it like this
D = C([1 48:48:end], :)

Sign in to comment.

More Answers (2)

Bjorn Gustavsson
Bjorn Gustavsson on 19 Oct 2020
Edited: Bjorn Gustavsson on 19 Oct 2020
If you can determine/calculate all rows you want to remove at once it is best to do the re-sizing of the array at once, instead of row-by-row (if I've understood this right, the reallocation-operation is the main argument to not automatically and incrementally grow arrays, ought to be similar for shrinking.):
idx2remove = [];
for i1 = 1:size(A,1)
if some_conds(A(i1,:))
idx2remove = [idx2remove,i1];
A(idx2remove,:) = [];
Ah, if you have to remove rows [3,4,5,6]+6*n then something like this should work:
idx2remove = 1:size(A,1);
idx2remove = reshape(idx2remove,6,[]);
idx2remove = idx2remove(3:end,:);
A(idx2remove(:),:) = [];
If this doesn't work out because your A doesn't have a multiple of 6 rows, then you'll have to modify the creation of the remove-array a bit. You could also go for creating an array with row-indices to keep and do:
A = A(idx2keep,:);

KSSV on 19 Oct 2020
Let A be your data. It seems every four rows have real value of complex number very less. We can use keep these rows.
idx = real(abs(A(:,1)))<=10^-10 ; % this will give indices of what you want to keep
iwant = A(idx,:)


Find more on Matrices and Arrays in Help Center and File Exchange




Community Treasure Hunt

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

Start Hunting!