How to vectorize for..loop with nested "if" and "break" statements
2 次查看(过去 30 天)
显示 更早的评论
Dear colleagues, I am trying to vectorize the following for..loop in my matlab code:
for c=Cmin:Cmax % Cmin, Cmax are columns indices
for r=Rmin:Rmax % Rmin, Rmax are rows indices
if(img1(r, c)==1) % img1 is a binary image
x1 = r;
y1 = c;
break;
end
end
end
The problem I am facing is the inner "if" and "statement" to be included in the vectorized code. I have followed several vectorization techniques, but I haven't happened to see one that include nested conditions. Any idea please. Thank you!
4 个评论
Kevin Claytor
2016-3-2
Are you actually trying to determine if this is a binary image? Because there are better ways of doing that, and your code snippet above would risk misclassifying any integer-valued image as a binary image.
dpb
2016-3-3
编辑:dpb
2016-3-3
"_it is the first occurrence , due to the break statement"_
The break only terminates the inner loop; it'll then go on and start over the outer loop. Since x1, y1 are each a single variable, you'll overwrite the first column location with the second, then the third, leaving at the end only the last column first row as the one and only pair of values retained.
采纳的回答
Orion
2016-3-2
Hi, it seems you're trying to do something like
% initialize indices
Rmin = 3;
Rmax = 8;
Cmin = 2;
Cmax = 7;
% initialize a zero matrix with some values to one.
img = zeros(10);
img(4,5) = 1; % inside Rmin/Rmax, Cmin/Cmax
img(3,7) = 1; % inside Rmin/Rmax, Cmin/Cmax
img(3,8) = 1; % OUTSIDE Rmin/Rmax, Cmin/Cmax => won't be in the result
% get all the points equal to 1 in the Rmin/Rmax, Cmin/Cmax submatrix
[allx,ally] = find(img(Rmin:Rmax,Cmin:Cmax)==1);
% correct the indices to fit those in the whole matrix.
allx = allx + Rmin - 1;
ally = ally + Cmin - 1;
% get the first component :
x1 = allx(1);
y1 = ally(1);
更多回答(1 个)
Jos (10584)
2016-3-2
[x1,y1] = find(img1(Rmin:Rmax,Cmin:Cmax)==1,1,'first')
and perhaps correct for the offset
x1 = x1 + Rmin - 1 ...
2 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Mathematics and Optimization 的更多信息
产品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!