我们正在开发一个处理眼视网膜医学图像的应用程序。
经常使用直接迭代像素索引的方法。而且,即使图像的大小固定为1024*768像素,这也可能是一项消耗CPU的操作,例如,为我们需要的二值化像素分配某些值。
lowlayers2 = zeros(img_y_size, img_x_size);
for i=1:numel(lowlayers)
y = rem(lowlayers(i),img_y_size);
x = fix(lowlayers(i)/img_y_size)+1;
lowlayers2(y,x) = 1;
end;
当尝试在上面的调试器类型的简单循环中使用parfor
时,循环中的所有变量都必须以切片的形式表示。我猜这是为了在循环中更原始地划分迭代。
如何修改循环或变量才能使用parfor?是否可以将每个变量表示为切片变量(即2或3维的多维矩阵)?
发布于 2018-06-11 06:27:04
切片变量是一个变量,它有一个从parfor循环引用出来的变量,并且它的每个元素只被一个worker访问(在parfor paralle worker中)
有时matlab无法将parfor循环中变量识别为“切片变量”,因此您可以使用临时变量并在parfor循环之后收集结果,
lowlayers2 = zeros(img_y_size, img_x_size);
parfor i=1:numel(lowlayers)
y = rem(lowlayers(i),img_y_size);
x = fix(lowlayers(i)/img_y_size)+1;
t(i)= sub2ind(size(lowlayers2),y,x);
end
lowlayers2(t)=1;
注意1:在老版本中向量化代码更好,因为循环过去并不像现在的R2017 (指this)中的循环那么好。
https://stackoverflow.com/questions/50788294
复制相似问题