Remove rows with consecutive numbers
1 Ansicht (letzte 30 Tage)
Ältere Kommentare anzeigen
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 Kommentare
Akzeptierte Antwort
Luna
am 3 Jan. 2019
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
3 Kommentare
Weitere Antworten (2)
Bruno Luong
am 3 Jan. 2019
Bearbeitet: Bruno Luong
am 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 Kommentar
Luna
am 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.
Siehe auch
Kategorien
Mehr zu Logical finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!