【问题标题】:if statement to skip certain values in loopif语句跳过循环中的某些值
【发布时间】:2018-07-02 10:45:39
【问题描述】:

我有一个XY 值范围,并且我有一个域,我不想计算其中节点的值。我想在 Matlab 的循环中使用 if 语句来跳过这些。

例如:

  • 范围:X = [1:20]Y = [1:20]
  • 我想忽略此范围内的节点:X = [5:7]Y = [12:14]

我认为代码应该是这样的:

for X=1:20
    for Y=1:20
        if X=5:7 & Y=12:14
            return
        end
        % the operation here !
        T(X,Y) = lab lab lab
    end
end

但是,我不确定如何正确编写条件。

【问题讨论】:

    标签: matlab loops for-loop if-statement


    【解决方案1】:

    您可以使用ismemberany== 的组合作为条件,continue 是跳到下一个循环索引的命令...

    % ismember example
    for X = 1:20
        for Y = 1:20
            if ismember( X, 5:7 ) && ismember( Y, 12:14 )
                continue
            end
            % your loop operations
        end
    end
    

    在这种情况下,您可以将 if 条件替换为

    if any( X == 5:7 ) && any( Y == 12:14 )
    

    【讨论】:

      【解决方案2】:

      我提出了 Wolfie 解决方案的替代方案,提前生成所有索引,然后应用单个循环:

      Xvect = repmat(X, length(Y), 1);
      Yvect = repmat(Y, 1, length(X));
      Xvect = Xvect(:);
      Yvect = Yvect(:);
      
      Xis5to7 = (Xvect >= 5) & (Xvect <= 7);
      Yis12to14 = (Yvect >= 12) & (Yvect <= 14);
      XYcomb = ~(Xis5to7 & Yis12to14); % This is the range to exclude, negate it.
      
      allX = Xvect(XYcomb);
      allY = Yvect(XYcomb);
      (par)for i = 1 : length(allX);
         X = allX(i);
         Y = allY(i);
         Ltemp(i) = ...;
      end
      L(XYcomb) = Ltemp;
      

      优点是可以在前面显示组合(allX, allY),而且由于单个循环,非常适合从中制作parfor

      【讨论】:

        猜你喜欢
        • 2019-01-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-06-30
        • 2017-06-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多