Matlab PARFOR循环中重复项的不必要覆盖

Matlab PARFOR循环中重复项的不必要覆盖,matlab,Matlab,在MATLAB中,下面的第一组循环说明了重复项,但第二组循环(使用PARFOR)则没有。它们将覆盖上一个值。我们如何解决这个问题 For循环: 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), fo

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

For循环:

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
有几点

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

    t(h) = dset(k);
    h = h+1;
    
  • 在每一组循环中,您没有做相同的事情。您是否尝试过更换线路:

    t(d) = dset(k);
    
    用我上面写的两行

  • 我忍不住注意到,这些循环集合中的每一个都可以使用函数替换为向量化的解决方案。基于上面的代码,我相信这应该完成同样的任务:

    t = dset(ismember(pset,set));
    
    或者,如果pset实际上应该是dset

    t = dset(ismember(dset,set));
    
    另外,命名一个变量集也不是一个好主意,因为已经有一个内置函数调用了:

  • 有几点

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

    t(h) = dset(k);
    h = h+1;
    
  • 在每一组循环中,您没有做相同的事情。您是否尝试过更换线路:

    t(d) = dset(k);
    
    用我上面写的两行

  • 我忍不住注意到,这些循环集合中的每一个都可以使用函数替换为向量化的解决方案。基于上面的代码,我相信这应该完成同样的任务:

    t = dset(ismember(pset,set));
    
    或者,如果pset实际上应该是dset

    t = dset(ismember(dset,set));
    
    另外,命名一个变量集也不是一个好主意,因为已经有一个内置函数调用了: