Matlab:比较两个向量后创建新向量

时间:2013-10-24 21:59:09

标签: matlab

我有两个向量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;

赞赏任何更好的方法。

2 个答案:

答案 0 :(得分:2)

使用sign功能

C = sign(B - A)

结果

C =

   1
   0
   1
  -1
  -1

答案 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语句,或ifelseif语句的序列,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函数更复杂,但更灵活 - 您可以将任意值分配给真和假分支,并且每个分支可以是向量或一个标量。