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

时间:2021-04-06 18:27:02

标签: arrays matlab struct

我想使用条件从结构中删除行,如果 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 行)
if selectedIms(j).hsvmean == 0

如何删除这些项目?

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

当您遍历元素时,您正在删除元素,使数组变小。您循环的结束索引在循环开始时确定,因此您将索引超过数组的末尾。您也在跳过元素。

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

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

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

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