2016-03-20 3 views

ответ

1

Вы можете использовать следующий синтаксис:

%defines input matrix (in your case it is already defined) 
m = 500; 
n = 400; 
z = 6; 
mat = rand(m,n,z); 

%initialize output matrix 
newMat = zeros(m,n,z*2); 

%assign old matrix values into the new matrix 
newMat(:,:,1:2:end) = mat; 
newMat(:,:,2:2:end) = mat; 
+0

На ваших последних двух строках, вы не имеете в виду: 'newMat (:,:, 1: 2: end) = mat'? – Suever

+0

@Suever - определенно - вот что я имел в виду :) спасибо за ваш комментарий! – drorco

1

Если у вас есть Matlab 2015a или более поздней версии, вы можете использовать repelem:

N = 2; %// number of times to repeat 
result = repelem(mat, 1, 1, N); %// repeat N times along 3rd dim 

Для более старых версий Matlab вы можете сделать это вручную следующим образом:

N = 2; %// number of times to repeat 
ind = ceil(1/N:1/N:size(mat,3)); %// build index with repetitions 
result = mat(:,:,ind); %// apply index along desired dim 

Пример:

>> %// Data 
>> mat = randi(9,2,4,2) 
mat(:,:,1) = 
    5  8  9  2 
    7  3  1  5 
mat(:,:,2) = 
    5  7  1  1 
    1  8  8  2 

>> %// First approach 
>> N = 2; 
>> result = repelem(mat, 1, 1, N) 
result(:,:,1) = 
    5  8  9  2 
    7  3  1  5 
result(:,:,2) = 
    5  8  9  2 
    7  3  1  5 
result(:,:,3) = 
    5  7  1  1 
    1  8  8  2 
result(:,:,4) = 
    5  7  1  1 
    1  8  8  2 

>> %// Second approach 
>> N = 2; 
>> ind = ceil(1/N:1/N:size(mat,3)); 
>> result = mat(:,:,ind) 
result(:,:,1) = 
    5  8  9  2 
    7  3  1  5 
result(:,:,2) = 
    5  8  9  2 
    7  3  1  5 
result(:,:,3) = 
    5  7  1  1 
    1  8  8  2 
result(:,:,4) = 
    5  7  1  1 
    1  8  8  2 
Смежные вопросы