【问题标题】:Push Pop cell array MatlabPush Pop 元胞数组 Matlab
【发布时间】:2014-06-22 01:34:27
【问题描述】:

我想在嵌套 for-loops 的运行时从 Matalb 中的单元格数组中删除一些单元格,以便我想永久删除单元格并在下一个迭代,它不会考虑单元格感染它的下一个单元格作为它的位置,我如何在 Matlab 中执行此操作,或者在这种情况下避免单元格数组的任何其他建议。我的单元格数组M 包含对象信息,P 是位置值。

我的代码:

for ii=1:1000
    for jj=1:20
        M{jj}=P{jj}(ii,:);
        if (P{jj}(ii,:) ~= 0)
            %here I want to delete M(jj) or M{jj} and also P(jj) or P{jj}
            % My try  M(jj) = []; M=  M(~cellfun('isempty',M));
            %but it gives error when the next iteration starts.
        end
    end
end

【问题讨论】:

  • 我认为它不会到达条件语句if (M{jj} == 0 ) 内部,因为您在条件语句之前分配M{jj} 的方式。
  • 这只是一个例子,请检查编辑的代码,在这种情况下我想删除一些jj,比如jj=2

标签: arrays matlab loops for-loop cell


【解决方案1】:

对于这种特殊情况,我建议使用while 而不是for -

ii=1;
jj=1;

jj_limit = 20;
while ii<=1000
    while jj<=jj_limit
        M{jj}=P{jj}(ii,:);
        if (P{jj}(ii,:) ~= 0)
            P(jj)=[];
            M(jj)=[];
            jj_limit = jj_limit-1;
            continue;
        end
        jj = jj+1;
    end
    ii = ii+1;
end

【讨论】:

  • 但我想将步长增加为for ii=1:dt:1000
  • 所以只需将ii = ii+1; 替换为ii=ii+dt;
  • 好的,我已经尝试过了,但 while 对我来说没有帮助。我不知道为什么,但我认为它是 for 循环所必需的,而且我想切片我的操作以便稍后使用 parfor 循环。
  • 这可能是因为您拥有数据的方式。在parfor上,不知道能不能处理条件语句。
  • 请为我制作for loop 的场景。有没有可能?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-03
  • 2013-08-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多