如何根据条件从结构中删除行



我想使用一个条件从结构中删除行,即如果hsvmean字段=0,则删除该行。我试过这个代码:

for j =1:length(selectedIms) % the length of selectedIms is 100
if selectedIms(j).hsvmean == 0
selectedIms(j)=[];
end
end

但我得到了这个错误:

索引超过了数组元素的数量(73(。

HSVColorSelection(第57行(中出错
如果selectedIms(j(.hsvmean==0

如何删除这些项目?

这里有一个解决方案,以备有人需要。创建一个新的结构,其中只有经过过滤的行

newSelectedlms = meanValues([meanValues.selected_ims]~= 0);

在元素上循环时,您正在删除元素,使数组变小。循环结束的索引是在循环开始时确定的,因此您将索引到数组结束之后。您也在跳过元素。

一个简单的解决方案是从后面开始循环:

for j=length(selectedIms):-1:1
...
end

另一种解决方案是一次删除所有元素。您可以构建一个索引列表,以便在循环中删除,然后在循环后删除这些元素。或者不用循环:

selectedIms([selectedIms.hsvmean] == 0) = [];

相关内容

  • 没有找到相关文章

最新更新