Info

この質問は閉じられています。 編集または回答するには再度開いてください。

Removing repeating data points but keeping the first and last ones

1 回表示 (過去 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