Convert cell-array to array-of-cells, for array-of-struct creation?
Ältere Kommentare anzeigen
Hi, how can I convert a cell-array to an array-of-cells?
I have (following a file textscan) a cell array of format:
Fr = [{uint8([1;2;3])}, {uint32([4;5;6])}, {[7;8;9]}]
And need to get to this array of cells:
To = [{Fr{1,1}(1), Fr{1,2}(1), Fr{1,3}(1)} ;...
{Fr{1,1}(2), Fr{1,2}(2), Fr{1,3}(2)} ;...
{Fr{1,1}(3), Fr{1,2}(3), Fr{1,3}(3)}]
..without having to loop (Fr can be large) through Fr.
The reason is that I want an array-of-struct, rather than struct-of-array. Reference:
Incorrect = cell2struct(Fr,{'f1','f2','f3'},2)
Correct = cell2struct(To,{'f1','f2','f3'},2)
Akzeptierte Antwort
Weitere Antworten (2)
Cedric
am 17 Jun. 2014
To = cellfun( @(cc)num2cell(cc), Fr, 'UniformOutput', false ) ;
To = [To{:}] ;
6 Kommentare
Is it the final structure (2 columns in the last array) or do you have more arrays and columns? Note that my solution treats the last array properly according to your definition of To in the statement (with no internal structure). So what output do you expect/need with this extra array?
>> To
To =
[1] [4] [7] [11] [12]
[2] [5] [8] [13] [14]
[3] [6] [9] [15] [16]
>> for cId = 1 : size( To, 2), disp( class( To{1,cId} )) ; end
uint8
uint32
double
uint8
uint8
Bjoern
am 18 Jun. 2014
Then here is a solution
To = cellfun( @(cc) mat2cell( cc, ones( size(cc, 1), 1 )), Fr, ...
'UniformOutput', false ) ;
To = [To{:}] ;
Cedric
am 18 Jun. 2014
See Andrei's answer, NUM2CELL can take a second "dim" argument and I didn't know that!
Bjoern
am 19 Jun. 2014
Azzi Abdelmalek
am 17 Jun. 2014
Bearbeitet: Azzi Abdelmalek
am 17 Jun. 2014
To=num2cell([Fr{:}])
4 Kommentare
Bjoern
am 17 Jun. 2014
Azzi Abdelmalek
am 17 Jun. 2014
Fr = [{uint8([1;2;3])}, {uint32([4;5;6])}, {[7;8;9]}]
n=numel(Fr{1})
m=numel(Fr)
[jj,ii]=meshgrid(1:n,1:m)
out=arrayfun(@(x,y) Fr{x}(y),ii,jj,'un',0)'
Bjoern
am 17 Jun. 2014
Azzi Abdelmalek
am 18 Jun. 2014
Fr = [{uint8([1;2;3])}, {uint32([4;5;6])},...
{[7;8;9]}, {uint8([11,12;13,14;15,16])}]
mm=cellfun(@(x) size(x,2),Fr)
nn=1:numel(mm)
r=size(Fr{1},1)
dd=cell2mat(arrayfun(@(x,y) [1:x;y*ones(1,x)],mm,nn,'un',0))
[i1,j1]=meshgrid(dd(1,:),1:r)
[i2,j2]=meshgrid(dd(2,:),1:r)
out=arrayfun(@(x,y,z) Fr{x}(y,z),i2,j1,i1,'un',0)
Kategorien
Mehr zu Cell Arrays finden Sie in Hilfe-Center und File Exchange
Produkte
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!
