2011-11-11 26 views
5

muszę wektorować następujący kod:Porównaj dwa wektory nierównych długościach, aby uzyskać logiczną tablicę

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 

Wyjście R powinno być logicznym tablica:

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

Najbliżej mogę dostać jest:

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

Iterowanie przez krótszy wektor jest oczywiście bardziej wydajne, ponieważ generuje mniej dla ite racje żywnościowe. Prawidłowe rozwiązanie nie powinno mieć żadnych pętli for.

Czy to możliwe w MATLAB/Octave?

Odpowiedz

8

Oto proste rozwiązanie z użyciem bsxfun.

bsxfun(@eq,b,a') 

ans = 

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