Remove rows with consecutive numbers
Show older comments
If I have a matrix such as:
A = [1 2 3 4 5
3 5 7 9 11
1 1 4 5 7
3 5 6 6 9
1 4 10 15 16];
I would like to remove all the rows from matrix A that contain more than 4 consecutive numbers. In matrix A we can see that first row contains 5 consecutive numbers [1 2 3 4 5], so this row should be removed from matrix A yielding:
A = [3 5 7 9 11
1 1 4 5 7
3 5 6 6 9
1 4 10 15 16];
Accepted Answer
More Answers (2)
Luna
on 3 Jan 2019
Hello Sena,
Try this below:
newA = A(~all((diff(A')' == 1)')',:);
5 Comments
sena
on 3 Jan 2019
Luna
on 3 Jan 2019
Ups sorry it was my mistake i didn't read the question well.
Here it checks the sum of the colums in diff of A which are greater than 3 gets deleted.
newA = A(~(sum((diff(A')' == 1)') >= 3)',:)
Luna
on 3 Jan 2019
Actually I realized that, in the question you said it will be more than 4 consecutive numbers that means 5 consecutive numbers. First code I shared does the exact thing you said. That means all row:
Now you say 3 or more numbers.
sena
on 3 Jan 2019
Luna
on 3 Jan 2019
Please look at the function I have given in another answer.
Write your k -> any number of consecutive you wish and your A matrix.
Bruno Luong
on 3 Jan 2019
Edited: Bruno Luong
on 4 Jan 2019
A = [1 2 3 4 5;
3 5 7 9 11;
1 1 4 5 7;
3 5 6 6 9;
1 4 10 15 16];
% Remove all rows of A contain at least n consecustive numbers
n = 3;
D = diff(A,1,2);
A(arrayfun(@(i) ~isempty(strfind(D(i,:), ones(1,n))),1:size(D,1)),:) = []
Result:
A =
3 5 7 9 11
1 1 4 5 7
3 5 6 6 9
1 4 10 15 16
1 Comment
Luna
on 3 Jan 2019
When A is like below:
A = [1 2 3 4 10
3 4 5 9 11
1 2 4 5 7
3 5 6 6 9
1 4 10 15 16];
result should be like:
A = [1 2 4 5 7
3 5 6 6 9
1 4 10 15 16];
So she asks for 3 or more consecutive numbers as I understand.
Categories
Find more on Creating and Concatenating Matrices 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!