我想在像素索引(ix,iy)的两个嵌套循环中计算分形图像。该示例代码只是为RGB值分配了一个随机数,而不是实际的计算。
x = 0:.2:4;
y = 0:.2:3;
nX = length(x);
nY = length(y);
RenderRed = zeros(nX,nY); RenderGreen = zeros(nX,nY); RenderBlue = zeros(nX,nY);
parfor ix = 1:nX
% for iy = 1:length(y) % error
for iy = 1:nY
% "compute" pixel (ix,iy)
RenderRed(ix, iy) = rand; RenderGreen(ix, iy) = rand; RenderBlue(ix, iy) = rand;
end
end
Pctr = [];
Pctr(:,:,1)=RenderRed; Pctr(:,:,2)=RenderGreen; Pctr(:,:,3)=RenderBlue;
handle = image(Pctr);
shg
代码如下所示工作,但是如果iy循环的结束值从nY更改为length(y)-请参见注释行-会发出错误:
Error: The variable RenderRed in a parfor cannot be classified.
See Parallel for Loops in MATLAB, "Overview".
为什么?在我对切片变量的理解中,没有任何版本可以使用:必须使用一个辅助变量来收集内部循环的结果,并将其分配给矩阵的一个切片。 但是length(y)而不是nY对变量的分类完全没有影响,因为y从未在循环中分配。
mlint在两个版本中均未发现错误。与MATLAB版本2016b,2017b的行为相同。
答案 0 :(得分:3)
根据Matlab documentation,这实际上可以工作!当您想在for
循环中使用嵌套的parfor
循环时:
要进行正确的变量分类,您必须通过常量或变量来定义嵌套在parfor循环中的for循环的范围。