使用填充

时间:2016-10-05 22:47:15

标签: matlab matrix concatenation

我想垂直连接不同尺寸的多个矩阵: 180 x n double n> = 7 。为了使这些矩阵具有相同的尺寸,我想将0填充为填充物。但是,有一点需要注意:填充程序必须在每个原始文本的最后7列之前,这意味着在连接之后,最后7列(从右侧)始终保持不变。这是一个连接3个矩阵的例子:

R1 is 180 x 13 double
R2 is 180 x 7 double
R3 is 180 x 10 double

我想创建R_concat = 540 x 13 double(540 = 180x3,13是三个待连接矩阵中最高的列数)。因此,必须填充少于13列的新矩阵以具有13列。由于R1具有最高列数,因此不需要填充。对于R2,需要额外增加6列零(180x6更精确)。这些列必须作为前6列添加,因此将跟随7个原始列。对于R3,需要3个额外的零列,但这些额外的列将介于原始的3列和4列之间。这样,原始的7个最后一列(即第4列到第10列)仍然是新矩阵中的最后7列(但现在它们将是第6列到第13列)。

如果这种解释有点笨拙,我很抱歉。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:2)

*将矩阵放入单元格数组

*使用cellfun对每个矩阵应用填充

*使用cell2mat连接矩阵

%place matrices into a cell 
matrices = {rand(5,13),rand(5,7),rand(5,10)};
% column number that padding should be applied before it
pad_column = 7;
%find maxmum of number of columns of matrices
sz=cellfun('size',matrices,2);
mx = max(sz);
%pad each matrix
padded = cellfun(...
                @(M)...
                    [...
                        M(:,1:end-pad_column),...
                        zeros(size(M,1),mx-size(M,2)),...
                        M(:,end-pad_column+1:end)...
                    ],...
                matrices,...
                'UniformOutput', false...
                );
%concatenate matrices
out = cell2mat(padded.');