索引超出for循环的范围

时间:2017-10-02 20:10:56

标签: matlab

我试图循环直到Ytotal的长度。但是在循环内部,Ytotal的一些元素会在满足条件时被删除。因此,Ytotal的长度应相应调整。但是,我仍然得到错误“索引越界”。任何人都可以建议我在哪里错了。感谢

--thread[=<style>]

2 个答案:

答案 0 :(得分:0)

Ytotal(aa)=[];

删除数组中的值。你真的想那样做吗?将它们设置为零会不会更好?

Ytotal(aa) = 0;

如果删除整个值,则数组会缩小。但是你已经为aa设定了范围。如果某些值被删除并且aa达到顶部,它将超过数组。

并且else路径中的代码应该怎么做?如果你为自己分配ytotal。你可以跳过它。

答案 1 :(得分:0)

如果循环很简单,你就不需要了。这是等效的

idx = Ytotal <= ymean+yerrorstd;
Ytotal = Ytotal(idx);
X = X(idx);

使用带有删除的for循环是一种非常糟糕的方法。创建要删除的元素的索引,将结果复制到新数组,或者使用while与计数器(仍然是一个糟糕的方法,但有时是直观的)

num_total = length(Ytotal);
num_ready = 0;
num_position = 1;
while num_ready < num_total
    if Ytotal(num_position) > ymean+yerrorstd;
        Ytotal(num_position)=[];
        x(num_position)=[];
    else
        Ytotal(num_position)=Ytotal(num_position); 
        x(num_position)=x(num_position);
        num_position = num_position +1;
    end
    num_ready = num_ready+1;
end