在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
答案 0 :(得分:4)
几点......
错别字:您确定应该使用变量 pset ,还是打算使用 dset ?此外,第一组循环中存在未定义的变量 p 。第一组循环中的代码是否应该读取以下内容?:
t(h) = dset(k);
h = h+1;
在每组循环中你没有做同样的事情。你有没有尝试更换这条线:
t(d) = dset(k);
我上面写的两行?
我不禁注意到,使用ISMEMBER函数可以用矢量化解决方案替换每组循环。基于上面的代码,我相信这应该完成同样的事情:
t = dset(ismember(pset,set));
或者,如果 pset 实际上应该是 dset :
t = dset(ismember(dset,set));
此外,将一个变量命名为 set 并不是一个好主意,因为已经有一个内置函数:SET。
< / LI> 醇>