【问题标题】:loop decrements at run time Matlab在运行时循环递减 Matlab
【发布时间】:2014-06-28 17:05:21
【问题描述】:

我正在使用 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

【问题讨论】:

    标签: matlab loops for-loop cell


    【解决方案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)=[]
    

    我认为第二种解决方案更快,因为数据只需移动一次,但我没有测试它。

    【讨论】:

    • 我想一次性删除单元格数组的特定索引。
    • 而且它不删除最后一个或第一个单元格,单元格数组中的任何单元格。其实我想根据新的大小刷新循环。
    • 代码不会删除所有元素,除非“条件”始终为真。
    猜你喜欢
    • 2014-10-05
    • 1970-01-01
    • 2013-05-04
    • 1970-01-01
    • 2019-10-07
    • 1970-01-01
    • 2018-01-16
    • 2018-09-06
    • 1970-01-01
    相关资源
    最近更新 更多