【问题标题】:Matlab: Creating new vector after comparing two vectorsMatlab:比较两个向量后创建新向量
【发布时间】:2013-10-25 06:19:18
【问题描述】:

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

感谢任何更好的方法。

【问题讨论】:

    标签: matlab


    【解决方案1】:

    使用sign 函数

    C = sign(B - A)
    

    结果

    C =
    
       1
       0
       1
      -1
      -1
    

    【讨论】:

    • 糟糕,对编辑表示歉意 - 我按照问题末尾的代码,而不是之前的规范。
    【解决方案2】:

    我发现将函数 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 语句,或者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 函数要复杂一些,但更灵活 - 您可以为真假分支分配任意值,每个分支可以是向量或标量.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-15
      • 2010-12-25
      • 1970-01-01
      • 2010-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多