0

我有两个向量 A 和 B。

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

我想对上述两个向量进行元素比较并获得第三个向量:

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

IE

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;

任何更好的方法表示赞赏。

4

2 回答 2

2

使用符号功能

C = sign(B - A)

结果

C =

   1
   0
   1
  -1
  -1
于 2013-10-24T22:04:28.057 回答
1

我发现将函数vif(矢量化 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语句或一系列ifandelseif语句一样工作,例如

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另一个答案中建议的函数更复杂,但更灵活 - 您可以为真假分支分配任意值,每个分支可以是向量或标量。

于 2013-10-24T22:11:24.490 回答