【问题标题】: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);