Split vector every time data changes from 2 to 1

1 次查看(过去 30 天)
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 CenterFile Exchange 中查找有关 Resizing and Reshaping Matrices 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by