Remove rows with consecutive numbers
조회 수: 1 (최근 30일)
이전 댓글 표시
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];
댓글 수: 0
채택된 답변
Luna
2019년 1월 3일
I wrote down a function your A (matrix), k (number of consecutive numbers) and result is newA.
Call that function in your workspace with defining A and k.
function newA = filterArray(A,k)
pattern = ones(1,k-1);
idx = contains(cellstr(num2str((diff(A')' == 1))),num2str(pattern));
newA = A(~idx,:);
end
추가 답변 (2개)
Bruno Luong
2019년 1월 3일
편집: Bruno Luong
2019년 1월 4일
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
Luna
2019년 1월 3일
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.
참고 항목
카테고리
Help Center 및 File Exchange에서 Logical에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!