MATLAB Answers

sumeeth
3

cell array into 3d matrix

Asked by sumeeth
on 17 Apr 2012
Latest activity Edited by Andrei Bobrov
on 17 Nov 2013
i have a cell array of size 104x104 with each cell having a matrix of size 1x1000. How can i convert this cell into a 3d matrix of size 104x104x1000 ??

  1 Comment

Sean de Wolski
on 17 Apr 2012
+1, good clear question with room for many good approaches

Sign in to comment.

4 Answers

Answer by Hanan Shteingart on 17 Nov 2013

You can concatenate cell array content using the "cat" function with this syntax: cat(dim, A{:}) where A is your cell array

  0 Comments

Sign in to comment.


the cyclist
Answer by the cyclist
on 17 Apr 2012

Both of these should do the same thing (and I think it is the thing you want). The second is a little bit more transparent, but slower.
B1 = cell2mat(arrayfun(@(x)permute(x{:},[3 1 2]),A,'UniformOutput',false));
B2 = zeros(104,104,1000);
for i = 1:104,
for j = 1:104,
B2(i,j,1:1000) = permute(A{i,j},[1 3 2]);
end
end

  1 Comment

Sean de Wolski
on 17 Apr 2012
Reshape() instead of permute() for speed.

Sign in to comment.


Sean de Wolski
Answer by Sean de Wolski
on 17 Apr 2012

Or the pure matrix manipulation approach:
%Sample Data:
X = reshape(magic(50),1,[]);
C = cell(100,100);
C(:) = {X}; %100 x 100 cell array of xs
%Engine:
D = reshape(reshape(cell2mat(C)',numel(X),numel(C))',size(C,1),size(C,2),numel(X)); %some reshapin'
%Check
all(all(all(bsxfun(@eq,D(1,1,:),D)))) %Is it right?
yay!

  0 Comments

Sign in to comment.


Andrei Bobrov
Answer by Andrei Bobrov
on 17 Apr 2012
Edited by Andrei Bobrov
on 17 Nov 2013

permute(reshape(cell2mat(C).',numel(C{1}),size(C,2),[]),[3 2 1])
or
reshape(cat(1,A{:}),[size(C), numel(C{1})])

  0 Comments

Sign in to comment.