【问题标题】:MATLAB "for" loop index editing isssues [duplicate]MATLAB“for”循环索引编辑问题[重复]
【发布时间】:2021-05-21 12:47:31
【问题描述】:

我正在尝试编写一个代码,该代码会自动检查有界范围内的输入数据并删除该边界之外的数据。我写了以下代码:

LANDA_E_4=landa;
 for i=1:m
    if i>m
        break
    elseif LANDA_T_2(i)<0.2021e+03 || LANDA_T_2(i)>1.3317e+03
        LANDA_T_2(i)=[];
        i=i-1;
    end

这里的问题是“i”没有在循环中更新。考虑第一个元素不在范围内,因此将其删除。现在循环应该检查新的第一个元素,它是前一个第二个元素(在删除第一个元素之前),但循环中的“i”仍然是 2。我无法更新“i”。

提前谢谢你

【问题讨论】:

    标签: matlab for-loop


    【解决方案1】:

    您的方法的问题在于,在循环的每次迭代中,i 都被设置为该迭代的次数,即使您在两者之间进行了修改。 (此外,使用i 作为变量是不好的做法,因为默认情况下它设置为虚单位1i。)要使您的方法有效,您必须使用while 循环。

    但是使用logical indexing 更容易避免这样的循环:

    % bougs data
    m = 100;
    LANDA_T_2=rand(1, m)*2e3;
    % remove loops
    LANDA_T_2(LANDA_T_2<0.2021e+03 | LANDA_T_2>1.3317e+03) = [];
    disp(size(LANDA_T_2))
    

    Try it online!

    【讨论】:

      猜你喜欢
      • 2020-02-06
      • 1970-01-01
      • 1970-01-01
      • 2015-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-09
      相关资源
      最近更新 更多