Merge multiple matrices with different columns into a single matrix
8 views (last 30 days)
Show older comments
I would like to combine several matrices with different columns (cell_test(:,1)) into one matrix by adding 0's (or rather []) in the missing values (see 'M' matrix).
cell_test = importdata("cell_test.mat"); %first column: matrices; second column: number of columns in the matrix
col = cell_test(1:3,2);
col = cell2mat(col);
col_max = max(col);
null_A = repmat(0,2,col_max-cell_test{1,2});
null_C = repmat(0,2,col_max-cell_test{3,2});
A_new = [cell_test{1,1} , null_A];
C_new = [cell_test{3,1} , null_C];
M = [A_new; cell_test{2,1}; C_new]; % result (where 0 become '[]' (possible?))
I would try to get the matrix 'M' as generically as possible, i.e. that I want to get that result even if I have multiple rows within 'cell_test'.
0 Comments
Accepted Answer
Voss
on 10 Nov 2023
load cell_test
One way:
% get the size of each matrix in cell_test(:,1)
sz = cellfun(@size,cell_test(:,1),'UniformOutput',false);
sz = vertcat(sz{:});
% max number of columns:
col_max = max(sz(:,2));
% function that appends columns of zeros (to fill to col_max)
% to a matrix m of size s:
f = @(m,s)[m zeros(s(1),col_max-s(2))];
% apply that function to each matrix in cell_test(:,1)
% and store the results in cell array C:
C = cellfun(f,cell_test(:,1),num2cell(sz,2), ...
'UniformOutput',false);
% vertically concatenate all matrices in C together:
M = vertcat(C{:})
Another way:
% get the size of each matrix in cell_test(:,1)
sz = cellfun(@size,cell_test(:,1),'UniformOutput',false);
sz = vertcat(sz{:});
% keep track of row offsets, for where to assign each matrix into the
% result matrix:
rows = cumsum([1; sz(:,1)]);
% initialize result matrix:
M = zeros(rows(end)-1,col_max);
% loop over cell_test(:,1) and put each matrix in place in the result
% matrix:
for ii = 1:size(cell_test,1)
M(rows(ii):rows(ii+1)-1,1:sz(ii,2)) = cell_test{ii,1};
end
% show the result:
disp(M);
0 Comments
More Answers (0)
See Also
Categories
Find more on Multidimensional Arrays in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!