wolffd@0: function N = cell2num(C) wolffd@0: % CELL2NUM Convert a 2D cell array to a 2D numeric array wolffd@0: % N = cell2num(C) wolffd@0: % If the cells contain column vectors, they must have the same number of rows in each row of C. wolffd@0: % Each column will be concatenated. wolffd@0: % wolffd@0: % Example 1: wolffd@0: % C = num2cell(rand(2,2)) wolffd@0: % [0.4565] [0.8214] wolffd@0: % [0.0185] [0.4447] wolffd@0: % N = cell2num(C) wolffd@0: % 0.4565 0.8214 wolffd@0: % 0.0185 0.4447 wolffd@0: % wolffd@0: % Example 2: wolffd@0: % C = cell(2, 3); wolffd@0: % for i=1:2 wolffd@0: % for j=1:3 wolffd@0: % C{i,j} = rand(i, 1); wolffd@0: % end wolffd@0: % end wolffd@0: % C = wolffd@0: % [ 0.8998] [ 0.8216] [ 0.6449] wolffd@0: % [2x1 double] [2x1 double] [2x1 double] wolffd@0: % C{2,1} = wolffd@0: % 0.8180 wolffd@0: % 0.6602 wolffd@0: % N=cell2num(C) wolffd@0: % 0.8998 0.8216 0.6449 wolffd@0: % 0.8180 0.3420 0.3412 wolffd@0: % 0.6602 0.2897 0.5341 wolffd@0: wolffd@0: wolffd@0: % error('use cell2mat in matlab 7') wolffd@0: wolffd@0: wolffd@0: if isempty(C) wolffd@0: N = []; wolffd@0: return; wolffd@0: end wolffd@0: wolffd@0: if any(cellfun('isempty', C)) %any(isemptycell(C)) wolffd@0: error('can''t convert cell array with empty cells to matrix') wolffd@0: end wolffd@0: wolffd@0: [nrows ncols] = size(C); wolffd@0: %N = reshape(cat(1, C{:}), [nrows ncols]); % this only works if C only contains scalars wolffd@0: r = 0; wolffd@0: for i=1:nrows wolffd@0: r = r + size(C{i,1}, 1); wolffd@0: end wolffd@0: c = 0; wolffd@0: for j=1:ncols wolffd@0: c = c + size(C{1,j}, 2); wolffd@0: end wolffd@0: N = reshape(cat(1, C{:}), [r c]); wolffd@0: