2016-10-05 66 views
0

我想纵向连接多个不同尺寸的矩阵:180 x n双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)。

对不起,如果这个解释有点笨拙。谁能帮忙?

回答

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.'); 
+0

美丽应用填充到每个矩阵

*!谢谢你,rahnema1! –