Delete rows at intervals

12 次查看(过去 30 天)
Hi, I have a very large matrix, and I would like to delete rows at specific intervals.
For example, I have the following matrix : [ 1 2 ; 3 4 ; 5 6 ; 7 8; 9 10; 11 12; 13 14; 15 16 ;17 18; 19 20; 21 22 ; 23 24]
I would like to delete every fourth row so the matrix looks like: [ 1 2; 3 4 ; 5 6; 9 10 ; 11 12; 13 14; 17 18; 19 20; 21 22 ]
Any help would be greatly appreciated.
Thanks,
Seamus
  1 个评论
Cristobal Silva
Cristobal Silva 2015-8-10
You could select individually which rows you want, like
A = [ 1 2 ; 3 4 ; 5 6 ; 7 8; 9 10; 11 12; 13 14; 15 16 ;17 18; 19 20; 21 22 ; 23 24]
B = A([1:3,5:7,9:11],:)
Of course, for large data this would be impractical, so you can use a for loop for such task combined with mod operator and vertical concatenation
A = [ 1 2 ; 3 4 ; 5 6 ; 7 8; 9 10; 11 12; 13 14; 15 16 ;17 18; 19 20; 21 22 ; 23 24];
B = zeros(0,2);
for i=1:length(A)
if (mod(i,4) ~= 0)
B = vertcat(B,A(i,:));
end
end
In other words, we create an empty 0-by-2 matrix (because A uses 2 cols per row) and then we just push to that matrix each row that we want to. In this case, we push every row that is not a multiple of 4 (using the mod function).

请先登录,再进行评论。

采纳的回答

Walter Roberson
Walter Roberson 2015-8-10
A(4:4:end,:) = [];
  3 个评论
Walter Roberson
Walter Roberson 2015-8-10
编辑:Image Analyst 2015-8-10
No, extracting every 4th row would be
every4thRow = A(4:4:end,:)
on the right hand side. When you assign [] to an array element, that means to delete the element.
Seamus
Seamus 2015-8-11
My apologies, I read it wrong. That's perfect, thank you very much.

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Creating and Concatenating Matrices 的更多信息

标签

Community Treasure Hunt

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

Start Hunting!

Translated by