cell array into 3d matrix

11 Ansichten (letzte 30 Tage)
sumeeth
sumeeth am 17 Apr. 2012
Bearbeitet: Andrei Bobrov am 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 Kommentar
Sean de Wolski
Sean de Wolski am 17 Apr. 2012
+1, good clear question with room for many good approaches

Melden Sie sich an, um zu kommentieren.

Antworten (4)

Hanan Shteingart
Hanan Shteingart am 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

the cyclist
the cyclist am 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 Kommentar
Sean de Wolski
Sean de Wolski am 17 Apr. 2012
Reshape() instead of permute() for speed.

Melden Sie sich an, um zu kommentieren.


Sean de Wolski
Sean de Wolski am 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!

Andrei Bobrov
Andrei Bobrov am 17 Apr. 2012
Bearbeitet: Andrei Bobrov am 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})])

Kategorien

Mehr zu Creating and Concatenating Matrices finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by