2011-11-11 30 views
5

tôi cần phải vectorize đoạn mã sau:Hãy so sánh hai vectơ có độ dài bất bình đẳng để có được một mảng logic

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 

Sản lượng r phải là một mảng logic:

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

Gần nhất tôi có thể nhận được là:

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

Lặp lại qua vector ngắn hơn rõ ràng là hiệu quả hơn vì nó tạo ra ít hiệu quả hơn cho ite khẩu phần ăn. Giải pháp chính xác không nên có cho vòng lặp nào.

Điều này có thể thực hiện được trong MATLAB/Octave không?

Trả lời

8

Đây là giải pháp đơn giản sử dụng bsxfun.

bsxfun(@eq,b,a') 

ans = 

    1  0  0 
    0  1  0 
    0  0  1 
    0  1  0 
    0  0  1 
    1  0  0 
Các vấn đề liên quan