2016-10-05 15 views
0

180 x n doublen> = 7という複数の行列を垂直方向に連結したいと考えています。これらの行列を同じ次元にするために、0を塗りつぶしたいと思います。ただし、1つの注意点があります。フィラーは各オリジナルの最後の7列より前になければなりません。つまり、連結後、最後の7列(右から)は常に同じままです。ここで連結する3つのマトリックスと例です異なる次元の行列をパディングで連結する

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

IはR_concat = 540 x 13 doubleを作成する(540 = 180x3、13 3-連結するマトリックスを横切る列の最大数です)。従って、13列未満の新しい行列は、13列を有するようにパディングされなければならない。 R1の列数が最も多いため、パディングは不要です。 R2の場合、余分なゼロ列が必要です(より正確には180x6)。これらの列は最初の6列として追加する必要がありますので、7つの元の列が続きます。 R3の場合、余分な3列のゼロが必要ですが、これらの余分な列は元の3列と4列の間に入ります。このようにして、元の7つの最後の列(つまり、列4から列10)は、新しい行列の最後の7つの列です(ただし、列6から13になります)。

この説明がやや不器用な場合は申し訳ありません。誰でも助けてくれますか? cellfunを使用してセル配列

答えて

2

*場所行列*はcell2mat CONCATENATE行列

%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! –

関連する問題