2012-09-25 4 views
1

Ma question est: existe-t-il un moyen de vectoriser cette opération dans MATLAB/Octave?Vectorisation d'une boucle for dans MATLAB/Octave

y = %a (m x 1) vector, with every entry in [1, 10] 
y2 = repmat(1 : 10, [m 1]); 
for i = 1 : m 
    y2(i, :) = (y2(i, :) == y(i)); 
end 
+0

@macduff: Je ne semble pas obtenir le bon résultat avec 'kron'. – Jonas

+0

@ Jonas, merci de m'avoir interrogé, je me suis un peu hâte avec mon commentaire. :-) – macduff

Répondre

4

bsxfun est une bonne façon de les calculs en expansion et vectorisation (il effectue un calcul multithread si elle est bénéfique).

m = 10; 

y = randperm(m); 

y2 = bsxfun(@eq,y,(1:m)')'; 
+0

Juste ce dont j'avais besoin. Merci! –

+0

@JoseRamirez: S'il vous plaît envisager d'accepter la réponse si vous le jugez utile – Jonas