modifying a cell array

11 次查看(过去 30 天)
shobhit mehrotra
shobhit mehrotra 2015-4-14
回答: Guillaume 2015-4-15
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 个评论
Guillaume
Guillaume 2015-4-15
What if you have two consecutive cells with only 1 element, should both be merged together and with the 3rd following cell?

请先登录,再进行评论。

回答(2 个)

Abhishek GS
Abhishek GS 2015-4-15
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 个评论
Abhishek GS
Abhishek GS 2015-4-15
Sorry about the formatting. This looks better.
cell3={15}
cell4={2,3.25,6.35}
if (length(cell3)<3)
cell4={cell4{:},cell3{:}}
end

请先登录,再进行评论。


Guillaume
Guillaume 2015-4-15
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

类别

Help CenterFile Exchange 中查找有关 Loops and Conditional Statements 的更多信息

标签

产品

Community Treasure Hunt

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

Start Hunting!

Translated by