2016-10-05 5 views
0

180 x n doublen> = 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 (180x3 = 540, 13 세 연접 될 행렬 걸쳐 높은 열 번호)를 작성하고 싶다. 따라서 13 열 미만의 새로운 행렬은 13 개의 열로 패딩되어야합니다. R1의 열 수가 가장 높으므로 패딩이 필요 없습니다. R2의 경우 6 개의 여분의 열이 필요합니다 (보다 정확하려면 180x6). 이 열은 첫 번째 열로 추가되어야하므로 7 개의 원래 열이 계속됩니다. R3의 경우 0의 추가 열 3 개가 필요하지만 이러한 추가 열은 원래 3과 4 열 사이에 들어갑니다. 이렇게하면 처음 7 개의 마지막 열 (즉, 열 4 ~ 열 10)은 새 행렬의 마지막 열 7 개가됩니다 (단, 이제는 6 ~ 13 열이됩니다).

이 설명이 다소 서투른 경우 죄송합니다. 아무도 도와 줄 수 있습니까? 세포 배열

*로

답변

2

* 장소 행렬을 사용 cellfuncell2mat 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! –

관련 문제