2013-10-24 103 views
0

後創建新載體,我有兩個向量A和B.Matlab的:比較兩個向量

A = [-1; 2; 4; 2; 4]; 
B = [1; 2; 14; 0; -4]; 

我想要做的上述兩個向量的elementwise對比,並獲得第三矢量:

C =[1; 0; 1; -1; -1]; 

C(i) = -1 if B(i) < A(i) 
C(i) = +1 if B(i) > A(i) 
C(i) = 0 if B(i) = A(i) 

我的解決方案:

C = A - B; 
C(C>0) = 1; 
C(C<0) = -1 
C(C==0) = 0; 

讚賞任何更好的方法。

回答

2

使用sign功能

C = sign(B - A) 

結果

C = 

    1 
    0 
    1 
    -1 
    -1 
+0

糟糕,爲編輯道歉 - 我在問題末尾跟隨代碼,而不是早些時候的規範。 –

1

我認爲它是有用定義一個函數vif(如矢量)作爲

function res = vif(test, a, b) 

    res = zeros(size(test)); 

    if isscalar(a); a = repmat(a, size(test)); end 
    if isscalar(b); b = repmat(b, size(test)); end 

    res(test) = a(test); 
    res(~test) = b(~test); 

end 

你然後能寫

>> C = vif(A>B, 1, vif(A<B, -1, 0)); 

的嵌套調用vif工作就像一個嵌套if聲明,或ifelseif語句的順序,一拉

if A > B 
    C = 1; 
else 
    if A < B 
    C = -1; 
    else 
    C = 0; 
    end 
end 

if A > B 
    C = 1; 
elseif A < B 
    C = -1; 
else 
    C = 0; 
end 

這是一個有點比更復雜使用另一個答案中建議的sign函數,但要靈活得多 - 您可以將任意值分配給true和false分支,並且e ach分支可以是矢量或標量。