連続した同じ数字をカウントアップする方法
조회 수: 5 (최근 30일)
이전 댓글 표시
例えば、
[0]と[1]の配列
[0 0 0 1 1 1 0 0 1]
連続した数字をカウントアップする方法を教えていただけないでしょうか。
連続が途切れた場合は1に戻る。
上の例ですと
[1 2 3 1 2 3 1 2 1]
댓글 수: 0
채택된 답변
Atsushi Ueno
2021년 5월 20일
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
Atsushi Ueno
2021년 5월 20일
(このコメントは意図的に英語の記述を避けています)
キーワード:「ランレングスエンコーダ」というキーワードで検索すると様々な言語によるエンコード方法の実装が見つかります。マトラボのファイルエクスチェンジでも見つかりますよ。
추가 답변 (0개)
참고 항목
카테고리
Help Center 및 File Exchange에서 インストールとライセンスの紹介에 대해 자세히 알아보기
제품
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!