2011-11-11 4 views
5

je dois vectoriser le code suivant:Comparer deux vecteurs de longueurs inégales pour obtenir un tableau logique

a = [1 2 3 2 3 1]; 
b = [1 2 3]; 

for i = 1:length(a) 
    for j = 1:length(b) 
     r(i, j) = (a(i) == b(j)); 
    end 
end 

La sortie r doit être un tableau logique:

1  0  0 
0  1  0 
0  0  1 
0  1  0 
0  0  1 
1  0  0 

Le plus proche que je peux obtenir est:

for j = 1:length(b) 
    r(:, j) = (a == b(j)); 
end 

L'itération à travers le vecteur le plus court est évidemment plus efficace car elle génère moins pour ite rations. La bonne solution ne devrait pas avoir de boucles for-loops.

Est-ce possible dans MATLAB/Octave?

Répondre

8

Voici une solution simple utilisant bsxfun.

bsxfun(@eq,b,a') 

ans = 

    1  0  0 
    0  1  0 
    0  0  1 
    0  1  0 
    0  0  1 
    1  0  0 
3

bsxfun(@eq, a', b)

Questions connexes