我写了一个代码如下
....
index = 1;
parfor mi=initmu:maxmu
for la1i=initla+1:(maxla-initla)/stepla+1
ImageD=uint8(GaussPoisonDenoise(Image, mu(mi), la1(la1i), la2(la1i)));
p = psnr(ImageD, Image0);
index=index+1;
end
end
....
但Matlab告诉我“由于使用变量索引的方式,parfor循环无法运行”。那是什么意思?我需要做什么?
答案 0 :(得分:0)
parfor循环将循环分开,以任意顺序同时运行不同的循环迭代。
问题在于变量" index"在不同的迭代和不同的值上同时增加。
例如,当一个matlab工作者计算迭代mu = 2并且将索引增加3时,另一个是计算迭代mu = 10并且将索引增加1。 在这种情况下,指数的有效价值是多少? (指数+ 3或指数+ 1?)
当循环中的迭代取决于其他迭代的结果时,不能使用parfor。
如果您需要"索引"只计算迭代次数,我想你可以计算它在intmu,maxmu,intla,maxla,stepla上运行。 (但你肯定还有另一个蠢事!)
答案 1 :(得分:0)
只有在要运行的多次迭代之间没有依赖关系时才能使用Parfor。在这种情况下,两次迭代之间存在依赖关系,因此parfor不起作用。