MATLAB Answers

0

Split vector every time data changes from 2 to 1

Asked by Francisco Anaya on 4 Mar 2019
Latest activity Answered by Jos (10584)
on 4 Mar 2019
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

  0 Comments

Sign in to comment.

3 Answers

Answer by Walter Roberson
on 4 Mar 2019
 Accepted Answer

vectors = mat2cell(A, diff([0;find(A(1:end-1)==2 & A(2:end) == 1); length(A)]),1);

  0 Comments

Sign in to comment.


Answer by Jos (10584)
on 4 Mar 2019

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

  0 Comments

Sign in to comment.


Answer by KSSV
on 4 Mar 2019

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)

  0 Comments

Sign in to comment.