我有两个向量A和B.
A = [-1; 2; 4; 2; 4];
B = [1; 2; 14; 0; -4];
我想对上面两个向量进行元素比较并获得第三个向量:
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;
赞赏任何更好的方法。
答案 0 :(得分:2)
答案 1 :(得分:1)
我发现将函数vif
(vectorized if)定义为
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
语句,或if
和elseif
语句的序列,la
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
函数更复杂,但更灵活 - 您可以将任意值分配给真和假分支,并且每个分支可以是向量或一个标量。