cell array into 3d matrix

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 comentario

Sean de Wolski
Sean de Wolski el 17 de Abr. de 2012
+1, good clear question with room for many good approaches

Iniciar sesión para comentar.

Respuestas (4)

Hanan Shteingart
Hanan Shteingart el 17 de Nov. de 2013

6 votos

You can concatenate cell array content using the "cat" function with this syntax: cat(dim, A{:}) where A is your cell array
the cyclist
the cyclist el 17 de Abr. de 2012

0 votos

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 comentario

Sean de Wolski
Sean de Wolski el 17 de Abr. de 2012
Reshape() instead of permute() for speed.

Iniciar sesión para comentar.

Sean de Wolski
Sean de Wolski el 17 de Abr. de 2012

0 votos

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!
Andrei Bobrov
Andrei Bobrov el 17 de Abr. de 2012
Editada: Andrei Bobrov el 17 de Nov. de 2013

0 votos

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

Categorías

Más información sobre Creating and Concatenating Matrices en Centro de ayuda y File Exchange.

Preguntada:

el 17 de Abr. de 2012

Editada:

el 17 de Nov. de 2013

Community Treasure Hunt

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

Start Hunting!

Translated by