Making consecutive 1s and 0s as a seperate element

If I have a cell say a= [1 0 0 0 1 1 1 1 0 1] I want b= [ 1,0 0 0, 1 1 1 1,0,1]

2 Commenti

When you create vector in matlab, two elements of vector are separated by comma (,) or space. Meaning of both are same.
I understand what you are stating but my aim is to make consecutive 1s and 0s as seperate elements in an array

Accedi per commentare.

 Risposta accettata

Ameer Hamza
Ameer Hamza il 17 Ott 2020
Modificato: Ameer Hamza il 17 Ott 2020
You can create a cell array
a = [1 1 0 0 0 1 1 1 1 0 1 1];
idx = [1 find(diff(a)~=0)+1 numel(a)+1];
C = cell(numel(idx)-1, 1);
for i = 1:numel(C)
C{i} = a(idx(i):idx(i+1)-1);
end
Result
>> C{1}
ans =
1 1
>> C{2}
ans =
0 0 0
>> C{3}
ans =
1 1 1 1
>> C{4}
ans =
0
>> C{5}
ans =
1 1

3 Commenti

but this is giving last element as '1' instead of '1 1'!
Try the updated code.
@Ameer Hamza thanks a lot!

Accedi per commentare.

Più risposte (2)

a = [1 0 0 0 1 1 1 1 0 1];
consecGroups = findgroups(cumsum([true, diff(a)~=0]));
b = arrayfun(@(g){a(consecGroups==g)},1:max(consecGroups));
% Show results
celldisp(b)
b{1} = 1 b{2} = 0 0 0 b{3} = 1 1 1 1 b{4} = 0 b{5} = 1

Categorie

Tag

Community Treasure Hunt

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

Start Hunting!

Translated by