MATLAB Answers

0

How to concatenate cells?

Asked by Fabricio on 12 Mar 2013
Hello,
I have 2 cell matrices like <1*1150cell> one has 1000*2 matrix in each cell: xxp the other has 1000*4 matrix in each cell: xxq
I would like to have a one cell matrices of <1*1150cell> with each cell having 1000*6 matrix from the concatenating both matrices.
I have tried different approaches, and tried resorting with loops but was not able to do it.
for i=1:1150
xx{i}={[xxp{i} xxq{i}]};
end
This does not work there are other longer ways to go apparently. But provides an idea of the problem.

  0 Comments

Sign in to comment.

3 Answers

Honglei Chen
Answer by Honglei Chen
on 12 Mar 2013

I think you just need to do
for i=1:1150
xx{i}=[xxp{i}; xxq{i}];
end
Alternatively, you can do
xx = cellfun(@(x,y)[x;y],xxp,xxq,'UniformOutput',false);

  1 Comment

Fabricio on 12 Mar 2013
It seems not to work both ways, but thanks for the answer.

Sign in to comment.


Answer by Konrad Malkowski on 12 Mar 2013

Does this do what you are looking for?
A = repmat([1,2,3,4], 1000, 1);
B = repmat([5,6], 1000, 1);
C = {A};
D = {B};
CC = repmat(C, 1, 1115);
DD = repmat(D, 1, 1115);
XX = cellfun(@horzcat, CC, DD, 'UniformOutput',false)

  1 Comment

Fabricio on 12 Mar 2013
Thank you, indeed, it does the trick. Nice way to go

Sign in to comment.


Walter Roberson
Answer by Walter Roberson
on 12 Mar 2013

One way would be
mat2cell( [cell2mat(xxp.'), cell2mat(xxq.')], ones(1,1150), 6) .'
But this uses for loops internally.

  1 Comment

Fabricio on 12 Mar 2013
It seems that it could work, but the .' at the end is not accepted It seems quite simple and straight forward though. Thanks anyways for your input

Sign in to comment.