Split vector every time data changes from 2 to 1

1 回表示 (過去 30 日間)
Francisco Anaya
Francisco Anaya 2019 年 3 月 4 日
回答済み: Jos (10584) 2019 年 3 月 4 日
I have one vector filled with 1 and 2 as follows:
Vector A:
1
1
1
1
2
2
2
1
1
2
2
1
1
1
2
2
1
1
2
2
I want to split the above vector everytime the value change the 1, then I will have:
Vector B Vector C Vector D Vector E
1 1 1 1
1 1 1 1
1 2 1 2
1 2 2 2
2 2
2
2
Thank you

採用された回答

Walter Roberson
Walter Roberson 2019 年 3 月 4 日
vectors = mat2cell(A, diff([0;find(A(1:end-1)==2 & A(2:end) == 1); length(A)]),1);

その他の回答 (2 件)

Jos (10584)
Jos (10584) 2019 年 3 月 4 日
Another approach:
A = [1 2 1 1 2 1 2 2 1 1 1 2 2 2 1 1 1 2].' % data
C = accumarray(cumsum([0 ; diff(A)==-1])+1, A, [], @(x) {x}) % engine
isequal(A,cat(1,C{:})) % check

KSSV
KSSV 2019 年 3 月 4 日
A = [1
1
1
1
2
2
2
1
1
2
2
1
1
1
2
2
1
1
2
2] ;
idx = find(diff(A)==-1) ;
idx = [0 ; idx ;length(A)] ;
N = length(idx)-1 ;
iwant = cell(N,1) ;
for i = 1:N
iwant{i} = A(idx(i)+1:idx(i+1)) ;
end
celldisp(iwant)

カテゴリ

Help Center および File ExchangeNumeric Types についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by