連続した同じ数字をカウントアップする方法

51 views (last 30 days)
丈太郎 森川
丈太郎 森川 on 20 May 2021
Commented: 丈太郎 森川 on 20 May 2021
例えば、
[0]と[1]の配列
[0 0 0 1 1 1 0 0 1]
連続した数字をカウントアップする方法を教えていただけないでしょうか。
連続が途切れた場合は1に戻る。
上の例ですと
[1 2 3 1 2 3 1 2 1]

Accepted Answer

Atsushi Ueno
Atsushi Ueno on 20 May 2021
x = [0 0 0 1 1 1 0 0 1] ;
y = cell2mat(arrayfun(@(t)1:t,diff(find([1 diff(x) 1])),'un',0));
演算の過程をメモします
x = [0 0 0 1 1 1 0 0 1] ;
>> diff(x)
ans = 0 0 1 0 0 -1 0 1
>> find([1 diff(x) 1])
ans = 1 4 7 9 10
>> diff(find([1 diff(x) 1]))
ans = 3 3 2 1
>> arrayfun(@(t)1:t,diff(find([1 diff(x) 1])),'un',0)
ans = {[1,2,3], [1,2,3], [1,2], 1}
>> cell2mat(arrayfun(@(t)1:t,diff(find([1 diff(x) 1])),'un',0))
ans = 1 2 3 1 2 3 1 2 1
1や0以外の数値でも機能します。なんと1行です。天才的発想ですね。もちろん私が考えたものではなく、Codyのある問題に対する回答なのでリンク掲載は控えます。(日本人は検索で辿り着いてしまうかもしれませんが)
  2 Comments
丈太郎 森川
丈太郎 森川 on 20 May 2021
早速のご回答ありがとうございます!
大変助かりますm(_ _)m

Sign in to comment.

More Answers (0)

Categories

Find more on プログラミング ユーティリティ in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!