Info

이 질문은 마감되었습니다. 편집하거나 답변을 올리려면 질문을 다시 여십시오.

Removing repeating data points but keeping the first and last ones

조회 수: 5 (최근 30일)
Andrew Luce
Andrew Luce 2019년 5월 20일
마감: MATLAB Answer Bot 2021년 8월 20일
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
Image Analyst
Image Analyst 2019년 5월 20일
What if your criteria would result in the first and second row having different numbers of elements?
Adam Danz
Adam Danz 2019년 5월 20일
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

답변 (1개)

Adam Danz
Adam Danz 2019년 5월 20일
편집: Adam Danz 2019년 6월 11일
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

이 질문은 마감되었습니다.

제품


릴리스

R2019a

Community Treasure Hunt

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

Start Hunting!

Translated by