在运行时Matlab循环递减

时间:2014-05-11 07:59:16

标签: matlab loops for-loop cell

我正在使用for循环中的单元格数组,但是我想在运行时删除指定条件下的单元格,并希望其余的循环迭代保持稳定。当从单元格数组中删除任何单元格时,应该在迭代更改时重新格式化循环条件。有什么建议/可能吗?

错误:

Index exceeds matrix dimensions.
Error in myCode (line 33)
         if (CellArray2{jj}(ii,:) ~= 0)

我的代码:

while ii<=1000
for jj=1:10
if (CellArray2{jj}(ii,:) ~= 0)
CellArray1(jj) = [];
CellArray2(jj) = [];
end
end
end

1 个答案:

答案 0 :(得分:1)

在索引数组时从数组中删除元素的最简单方法是向后编制索引:

for index=numel(MyArray):-1:1
  if (condition)
    MyArray(index)=[]
  end
end

如果您无法在案例中向后迭代,请跟踪要删除的元素并立即删除所有元素:

toDelete=false(size(MyArray))
for index=1:numel(MyArray)
  if (condition)
    toDelete(index)=true
  end
end
%deletes everything afterwards, using logical indexing
MyArray(toDelete)=[]

我假设第二个解决方案更快,因为数据只需要移位一次,但我没有测试它。