how to split an array with a periodic set of elements as it reaches to the maximum elements?

3 Ansichten (letzte 30 Tage)
lets say i have an array with periodic set of elements such as below:
A=[2 2 2 3 3 4 4 5 5 5 1 1 1 2 2 2 2 3 3 4 4 4 4 5 5 1 1 2 3 3 4 4 4 5 5];
i want to split Array A in to 3 separate arrays(in this case) as it reach to element 5 as below:
B1=[2 2 2 3 3 4 4 5 5 5];
B2=[1 1 1 2 2 2 2 3 3 4 4 4 4 5 5];
B3=[1 1 2 3 3 4 4 4 5 5];
i greatly appreciate your help
thank you

Akzeptierte Antwort

Andrei Bobrov
Andrei Bobrov am 24 Mai 2017
B = mat2cell(A(:)',1,diff(find([true,diff([A(:)'== 5,0]) == -1])));
  3 Kommentare
Joseph
Joseph am 24 Mai 2017
thank you for answer, however when i apply to my array, it gives me below error:
Input arguments, D1 through D2, must sum to each dimension of the input matrix size, [1 32025]
i should mention that my array size is A(32025,1);
Andrei Bobrov
Andrei Bobrov am 25 Mai 2017
Bearbeitet: Andrei Bobrov am 25 Mai 2017
Please attach your array A with size [32025 x 1] as mat-file.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

KSSV
KSSV am 24 Mai 2017
A=[2 2 2 3 3 4 4 5 5 5 1 1 1 2 2 2 2 3 3 4 4 4 4 5 5 1 1 2 3 3 4 4 4 5 5];
didx = diff(A==5) ;
idx = find(didx==-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)

Kategorien

Mehr zu Matrices and Arrays finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by