2011-11-11 64 views
5

我需要向量化以下代碼:比較不等長度的兩個矢量來獲得的邏輯陣列

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 

的輸出r應該是一個邏輯陣列:

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

我可以得到最接近是:

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

迭代通過較短的向量顯然更有效,因爲它爲ite生成次數更少口糧。正確的解決方案應該沒有任何for-loops。

這是可能的MATLAB /八度?

回答

8

下面是一個簡單的解決方案,使用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)