Try this
S(1).model_data = rand( 4, 10 );
S(2).model_data = rand( 2, 10 );
S(3).model_data = rand( 3, 11 );
Out = cssm_( S );
function Out = cssm_( S )
sz(1) = max( arrayfun( @(s) size( s.model_data, 1 ), S ) );
sz(2) = max( arrayfun( @(s) size( s.model_data, 2 ), S ) );
Out = struct( 'model_data', repmat( {nan(sz)}, 1,numel(S) ) );
for jj = 1 : numel(S)
sz = size(S(jj).model_data);
Out(jj).model_data(1:sz(1),1:sz(2)) = S(jj).model_data;
end
end
In response to comment
This will handle sparse, test it. ( cssm_ assumes that all values of data_model are either full or sparse.)
S(1).model_data = sparse( rand( 4, 10 ) );
S(2).model_data = sparse( rand( 2, 10 ) );
S(3).model_data = sparse( rand( 3, 11 ) );
Out = cssm_( S );
function Out = cssm_( S )
sz(1) = max( arrayfun( @(s) size( s.model_data, 1 ), S ) );
sz(2) = max( arrayfun( @(s) size( s.model_data, 2 ), S ) );
if issparse( S(1).model_data )
Out = struct( 'model_data', repmat( {sparse(nan(sz))}, 1,numel(S) ) );
else
Out = struct( 'model_data', repmat( {nan(sz)}, 1,numel(S) ) );
end
for jj = 1 : numel(S)
sz = size(S(jj).model_data);
Out(jj).model_data(1:sz(1),1:sz(2)) = S(jj).model_data;
end
end
Version 3 in response to a later comment
S(1,1).model_data = sparse( rand( 4, 3 ) );
S(1,2).model_data = sparse( rand( 2, 3 ) );
S(1,3).model_data = sparse( rand( 3, 5 ) );
Out = cssm_( S );
function Out = cssm_( S )
sz(1) = max( arrayfun( @(s) size( s.model_data, 1 ), S ) );
sz(2) = max( arrayfun( @(s) size( s.model_data, 2 ), S ) );
if issparse( S(1).model_data )
Out = struct( 'model_data', repmat( {sparse(nan(sz))}, size(S) ) );
else
Out = struct( 'model_data', repmat( {nan(sz)}, size(S) ) );
end
for jj = 1 : numel(S)
sz = size(S(jj).model_data);
Out(jj).model_data(1:sz(1),1:sz(2)) = S(jj).model_data;
end
end
0 Comments
Sign in to comment.