Info

This question is closed. Reopen it to edit or answer.

Removing repeating data points but keeping the first and last ones

1 view (last 30 days)
Hello, say I have matrix with repeating parts in the frist and second row and all zeros in the third
A=1,2,3,4,5,6,7,8,9,1,1,1,1,1,1,1,1,1,3,4,5,6
9,9,9,9,9,9,9,9,9,2,3,4,5,6,7,8,9,8,2,2,2,2
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
I want to keep the columns where there is no repeating in the column before and after. Additonally, I want to keep the columns where the repeating starts and ends. The resulting matrix would look like this in the end
A=1,9,1,1,3,6
9,9,2,8,2,2
0,0,0,0,0,0
How would I get this
thank you
  2 Comments
Image Analyst
Image Analyst on 20 May 2019
What if your criteria would result in the first and second row having different numbers of elements?
Adam Danz
Adam Danz on 20 May 2019
I wondered that, too. For example,
A=[ 1,2,3,4,5,6,7,1,1,1,1,1,1,1,1,1,1,1,3,4,5,6;
9,9,9,9,9,9,9,9,9,9,9,4,5,6,7,8,9,8,2,2,2,2;
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];
% ^ ^ ^ ^
Is that an example of what you were thinking, Image Analyst?
My answer removes columns in any of the rows have repeats (but keeps the first and last ones).
so,
Ap = 1 1 3 6
9 8 2 2
0 0 0 0

Answers (1)

Adam Danz
Adam Danz on 20 May 2019
Edited: Adam Danz on 11 Jun 2019
A is your input matrix, Ap is the trimmed matrix.
isUnq = find(~any(diff(A([1,2],:),[],2)==0, 1))+1;
keepColIdx = unique([1,isUnq, isUnq-1, size(A,2)]);
Ap = A(:,keepColIdx);
Result
Ap =
1 9 1 1 3 6
9 9 2 8 2 2
0 0 0 0 0 0

Products


Release

R2019a

Community Treasure Hunt

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

Start Hunting!