フィルターのクリア

Remove repeated numbers in series

7 ビュー (過去 30 日間)
Eric
Eric 2019 年 4 月 7 日
編集済み: madhan ravi 2019 年 4 月 12 日
Hi everyone,
I have a sequence of number like
x = [3 3 3 3 3 2 2 2 2 2 2 2 1 1 1 1 3 3 3 3 3 3];
And I would like to reduce it to be:
x = [3 2 1 3];
Does anyone know how to do that?
Thanks a lot,
Eric

回答 (2 件)

Star Strider
Star Strider 2019 年 4 月 7 日
Try this:
x = [3 3 3 3 3 2 2 2 2 2 2 2 1 1 1 1 3 3 3 3 3 3];
dx = diff([0 x]);
fx = find(dx ~= 0);
Result = x(fx)
producing:
Result =
3 2 1 3
Note: This works here, and may not scale up to other problems.
  2 件のコメント
Stephen23
Stephen23 2019 年 4 月 8 日
編集済み: Stephen23 2019 年 4 月 8 日
Note that this code will not work if the first value happens to be zero. This bug is easy to fix by prepending a logical value after diff (rather than prepending a fake data value before diff). It is also easy get rid of the superfluous find as well:
>> x = [0 0 0 3 3 3 3 3 2 2 2 2 2 2 2 1 1 1 1 3 3 3 3 3 3];
>> y = x([true,diff(x)~=0])
y =
0 3 2 1 3
Star Strider
Star Strider 2019 年 4 月 12 日
@Stephen —
Noted. Thank you.

サインインしてコメントする。


madhan ravi
madhan ravi 2019 年 4 月 8 日
編集済み: madhan ravi 2019 年 4 月 12 日
Try this:
ii = [find(x(1:end-1) ~= x(2:end)) numel(x)];
l = diff([0 ii]); % just as a bonus but can be neglected if your not interested how many times the number appears consecutively
u = x(ii)
  2 件のコメント
Stephen23
Stephen23 2019 年 4 月 8 日
What is l used for?
madhan ravi
madhan ravi 2019 年 4 月 8 日
Ah , it’s not needed but it gives the number of consecutive times the number appears in a sequence.

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeMatrices and Arrays についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by