modifying a cell array

12 views (last 30 days)
shobhit mehrotra
shobhit mehrotra on 14 Apr 2015
Answered: Guillaume on 15 Apr 2015
I have a cell array
A = cell 1: 1,2,5,6 (4x1)
cell 2: 3, 5.5, 6.4, 3, 7.2 (5x1)
cell 3: 15 (1x1)
cell 4: 2, 3.25, 6.35 (3x1)
cell 5: 2, 13,22 (3x1)
I want to combine any cell with than 3 elements to the cell following it. For example merge cell 3 into cell 4, so the "new" cell 3 consists of 2, 3.25, 6.35, 15.
Thanks
  1 Comment
Guillaume
Guillaume on 15 Apr 2015
What if you have two consecutive cells with only 1 element, should both be merged together and with the 3rd following cell?

Sign in to comment.

Answers (2)

Abhishek GS
Abhishek GS on 15 Apr 2015
Hi Shobit,
I am assuming you want to know how to modify/combine cell arrays and you already know how to loop through the different cell arrays that you have. This may work for you.
cell3={15} cell4={2,3.25,6.35} if (length(cell3)<3) cell4={cell4{:},cell3{:}} end
Hope this helps,
Abhishek
  1 Comment
Abhishek GS
Abhishek GS on 15 Apr 2015
Sorry about the formatting. This looks better.
cell3={15}
cell4={2,3.25,6.35}
if (length(cell3)<3)
cell4={cell4{:},cell3{:}}
end

Sign in to comment.


Guillaume
Guillaume on 15 Apr 2015
Here is a vectorised way of doing it. This may or may not be faster than doing it explicitly with a loop:
tooshort = cellfun(@numel, A) < 3;
assert(all(diff(find(tooshort)) > 1), 'Does not work with two consecutive cells being too short')
assert(tooshort(end) == 0, 'Does not work if last element is too short');
tooshort = tooshort(1:end-1);
A([tooshort false]) = cellfun(@horzcat, A([tooshort false]), A([false tooshort]), 'UniformOutput', false); %merge consecutive cells
A([false tooshort]) = []; %and delete the 2nd cells

Categories

Find more on Loops and Conditional Statements in Help Center and File Exchange

Products

Community Treasure Hunt

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

Start Hunting!