【问题标题】:How do I modify multiple vectors based on a condition on either vector?如何根据任一向量的条件修改多个向量?
【发布时间】:2020-03-04 00:55:13
【问题描述】:

我在 MATLAB 中有两个向量:

AA = [1 2 3 5 6 7 100 1 4 5];
BB = [1 100 3 4 5 8 9 10 11 12];

两者的长度相同。

如果数字100 出现在任一向量中,我想将其替换为0,并将另一个矩阵中的对应数字(即使这不是100)替换为0

期望的输出:

AA = [1 0 3 6 7 0 1 4 5];
BB = [1 0 3 4 5 0 9 10 11 12];

我正在努力寻找解决方案,我可以考虑创建第三个向量并尝试使用一些逻辑规则,但我似乎无法让它发挥作用。

CC = [AA' BB'];
% logical rules here

【问题讨论】:

    标签: matlab indexing vectorization logical-operators


    【解决方案1】:

    使用布尔运算符| (OR) 获取索引:

    AA = [1 2 3 5 6 7 100 1 4 5];
    BB = [1 100 3 4 5 8 9 10 11 12];
    
    ind = AA == 100 | BB == 100;
    AA(ind) = 0
    BB(ind) = 0
    

    【讨论】:

      【解决方案2】:

      如果您确实从向量创建了一个矩阵,您可以使用any 进行逻辑索引。如果您实际上有超过 2 个向量,这很灵活:

      C = [AA; BB]; % Each row is one of the original vectors
      C( :, any(C == 100, 1)) = 0;
      
      % C = [ 1     0     3     5     6     7     0     1     4     5
      %       1     0     3     4     5     8     0    10    11    12 ]
      

      【讨论】:

        猜你喜欢
        • 2020-06-04
        • 1970-01-01
        • 2022-06-28
        • 2014-05-24
        • 1970-01-01
        • 2014-01-25
        • 1970-01-01
        • 1970-01-01
        • 2021-08-05
        相关资源
        最近更新 更多