在PARFOR循环中不需要覆盖重复项

时间:2009-05-15 15:20:15

标签: matlab

在MATLAB中,下面的第一组循环说明重复,但第二组循环(使用PARFOR)则没有。它们会覆盖以前的值。我们如何解决这个问题?

For loop:

for d = 1:length(set),
  for k = 1:length(dset),
    if strcmp(pset(k),set(d)),
      t(h,p) = dset(k);
      h = h+1;
    end
  end
end

PARFOR循环:

parfor d = 1:length(set),
  for k = 1:length(dset),
    if strcmp(pset(k),set(d)),
      t(d) = dset(k);
    end
  end
end

1 个答案:

答案 0 :(得分:4)

几点......

  1. 错别字:您确定应该使用变量 pset ,还是打算使用 dset ?此外,第一组循环中存在未定义的变量 p 。第一组循环中的代码是否应该读取以下内容?:

    t(h) = dset(k);
    h = h+1;
    
  2. 在每组循环中你没有做同样的事情。你有没有尝试更换这条线:

    t(d) = dset(k);
    

    我上面写的两行?

  3. 我不禁注意到,使用ISMEMBER函数可以用矢量化解决方案替换每组循环。基于上面的代码,我相信这应该完成同样的事情:

    t = dset(ismember(pset,set));
    

    或者,如果 pset 实际上应该是 dset

    t = dset(ismember(dset,set));
    

    此外,将一个变量命名为 set 并不是一个好主意,因为已经有一个内置函数:SET

    < / LI>