Interleaving columns of two cell arrays
Show older comments
Hey all,
I have two cell arrays:
- ca = 7x9 cell array where each cell is a block of pixels 64x64x3
- ca2 = 7x8 cell array where each cell is a block of pixels 64x64x3
I would like to interleave the cell array by columns like so:
- ca3 = {ca{:,1};ca2{:,1};ca{:,2};ca2{:,2};ca{:,3};ca2{:,3};ca{:,4};ca2{:,4};ca{:,5};ca2{:,5};ca{:,6};ca2{:,6};ca{:,7};ca2{:,7};ca{:,8};ca2{:,8};ca{:,9}}';
I'm sure there has to be a more programmatic way of doing this and in a more extensible fashion(where if I have more then 8/9 columns I wouldn't have to keep adding to the code).
Thanks! Hope this makes sense
Accepted Answer
More Answers (2)
the cyclist
on 19 May 2016
I think this does what you want
% Your actual data here. (These are empty, but wouldn't be for your application)
ca = cell(7,9);
ca2 = cell(7,8);
% Append extra, empty column of cells, so that we can concatenate below
ca2_tmp = [ca2, cell(7,1)];
% Concatenate top-to-bottom, then reshape
ca3 = reshape([ca;ca2_tmp],7,18);
% Trim spurious final column
ca3(:,end) = [];
1 Comment
Raphael Chazelle
on 19 May 2016
the cyclist
on 19 May 2016
Edited: the cyclist
on 19 May 2016
ca3 = [ca,ca2];
idx = reshape(1:18,[],2)'
ca3 = ca3(:,idx(1:end-1));
EDIT: Fixed this to get the indexing right. Arguably a bit easier than my other solution, but basically works on the same principle.
Categories
Find more on Programming in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!