2012-05-07 4 views

Répondre

1

Vous pouvez essayer cette:

a = repmat(1:5:20,1,3); 
b = unique(a); 

bsxfun(@eq, a', b) 

Le résultat serait:

ans = 

1  0  0  0 
0  1  0  0 
0  0  1  0 
0  0  0  1 
1  0  0  0 
0  1  0  0 
0  0  1  0 
0  0  0  1 
1  0  0  0 
0  1  0  0 
0  0  1  0 
0  0  0  1 
+0

est-ce pas essentiellement '[oeil (4); oeil (4); œil (4)] '? –

+0

Non, ce n'est pas le cas. Le résultat arrive juste à être le même. Remplacez la deuxième ligne du code par 'b = fliplr (unique (a));' et voyez que le résultat est différent. –

+0

Noté. Continuer! –

0
a = repmat(1:5:20,1,3) 
b=unique(a); 
c = repmat(a',1,numel(b))== repmat(b,numel(a),1); 

mais en général une boucle sera plus rapide, repmat doit être évité. Donc, maintenant avec une boucle:

a = repmat(1:5:20,1,3) 
b=unique(a); 
c=false(numel(a),numel(b)); 
for ii=1:numel(a) 
    c(ii,:) = a(ii)==b; 
end 
Questions connexes