concatenating elements of an array in a certain manner

Hello all,
I have a matrix b, with the dimension of NxLxNm. I would like to first consider b(:,:,1) up to b(:,:,j-1) where j ranges from 1 to Nm. In each iteration of j, I would like to create a new cell c with a total dimension of 1XL, an element dimension of Nxj-1, which concatenates the elements of b(:,:,1) to b(:,:,j-1) in a way such that e.g. c{1}=[b(1,1,1), b(1,1,2), ... b(1,1,j-1); b(2,1,1), b(2,1,2),...b(2,1,j-1),....]; c{2}==[b(1,2,1), b(1,2,2), ... b(1,2,j-1); b(2,1,1), b(2,1,2),...b(2,1,j-1),....], and so forth. I would appreciate if somebody can help me please. Thanks.

 Accepted Answer

c=permute(b(:,:,1:j-1),[1,3,2]);
c=num2cell(c,[1,2]);
c=c(:).';

More Answers (1)

For each j, the creation of the cell array c is a simple mat2cell:
c = mat2cell(b(:, :, 1:j), size(b, 1), ones(1, size(b, 2), j)
Or, if you want to remove the singleton column dimension:
c = cellfun(@squeeze, mat2cell(b(:, :, j), size(b, 1), ones(1, size(b, 2), j), 'UniformOutput', false)
Finally, to create all the c in one go:
allc = arrayfun(@(j) mat2cell(b(:, :, 1:j), size(b, 1), ones(1, size(b, 2)), j), 1:size(b, 3), 'UniformOutput', false)
Note: I'm not too sure why you use j-1, since, if j starts at 1, j-1 index is not valid.

2 Comments

Thanks for your valuable note! However, I am getting an error when I run the code.

Sign in to comment.

Categories

Asked:

Mnr
on 28 Jun 2015

Commented:

on 29 Jun 2015

Community Treasure Hunt

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

Start Hunting!