【问题标题】:Omitting indices when condition isn't met不满足条件时省略索引
【发布时间】:2016-02-04 22:43:41
【问题描述】:

我想运行一个循环,当两件事不相等时,我希望从我的新结构中省略该索引。它一直有效,直到它到达第一个不等式。然后它只是由于某种原因停止循环,并且在省略 j=45 后它不会在 j=46 上继续。我不知道为什么。这是代码

for j=1:length(files_cdf)
   z(j)=isequal(files_cdf(j).ith,list(j));
   if isequal(z(j),1)
      cdf_new(j)=files_cdf(j);
   else
      cdf_new(j)=[];
   end
end

【问题讨论】:

    标签: matlab loops indexing


    【解决方案1】:

    这里有两种方法。第一个可能会导致性能下降,因为这意味着您无法预分配 cdf_new 数组。

    for j=1:length(files_cdf)
       z(j)=isequal(files_cdf(j).ith,list(j));
       if isequal(z(j),1)
          cdf_new(end+1)=files_cdf(j);
       end
    end
    

    这只是为您要保留的每个元素增加数组cdf_new

    或者,您可以为cdf_new 的索引保留一个单独的计数器。

    c=0;
    for j=1:length(files_cdf)
       z(j)=isequal(files_cdf(j).ith,list(j));
       if isequal(z(j),1)
          c=c+1;
          cdf_new(c)=files_cdf(j);
       end
    end
    

    使用这种技术,如果您预先分配了数组 cdf_new,您可以将其截断为仅有效值:

    cdf_new = cdfnew(1:c);  
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-05-26
      • 1970-01-01
      • 2016-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多