2014-04-20 2 views
2

Dire que j'ai une matrice 3-D a de dimension [X, Y, Z],Comment répéter chaque dimension d'une matrice 3-D dans Matlab

a(:,:,1) = [1 2; 3 4]; 
a(:,:,2) = [5 6; 7 8]; 

est-il un moyen de répéter chaque entrée de a, disons N fois et construisons une nouvelle matrice, b, de dimension [X, Y, N * Z]? Par exemple, si N = 2, d'avoir une matrice b comme si,

%repeat first element of 'a' 2ce 
b(:,:,1) = [1 2; 3 4]; 
b(:,:,2) = [1 2; 3 4]; 

%repeat second element of 'a' 2ce 
b(:,:,3) = [5 6; 7 8]; 
b(:,:,4) = [5 6; 7 8]; 

En utilisant une boucle imbriquée peut réaliser cela bien sûr, par exemple,

%not tested, but should work 
b = zeros(X,Y,N*Z); 

k=1; 

for j=1:Z 
    for i=1:N 
    b(:,:,k) = a(:,:,j); 
    k=k+1; 
    end 
end 

Mais je voudrais savoir s'il y a une fonction intégrée disponible à cet effet.

Répondre

2

Créer un index de la forme 1,1,2,2, ... (exemple pour N=2) et l'utiliser dans la troisième dimension:

b = a(:,:,ceil(1/N:1/N:size(a,3))); 
+0

Parfait. Merci. – iab