2013-05-06 4 views
0

Je voudrais vectoriser le code suivant Octave:fonctions Vectoriser sur les régions du tableau Octave/Matlab

A = 1:100; 
B = [20 40 60]; 
C = zeros(3,11); 

for i = B, 
    C(i,:) = A((B(i) - 10) : B(i)); 
end 

qui extrait des sous-réseaux à partir des indices spécifiques d'un tableau plus.

J'ai essayé:

C = A(B - 10,B); 

Mais cela ne renvoie le premier sous-tableau.

Merci

Répondre

1

Que diriez-vous

>> C = A(bsxfun(@plus, -10:0, B')); 

C = 

    10 11 12 13 14 15 16 17 18 19 20 
    30 31 32 33 34 35 36 37 38 39 40 
    50 51 52 53 54 55 56 57 58 59 60 

Si vous ne disposez pas bsxfun en octave, vous pouvez le faire avec repmat

C = A(repmat(-10:0, [3 1]) + repmat(B', [1 11])); 

PS,
Il est préférable not to use i as a variable in Matlab.

+0

Merci, ils ont tous deux travaillé magnifiquement – Tom

Questions connexes