Vectorization of for loop

1 view (last 30 days)
Yaser Alghawi
Yaser Alghawi on 14 Mar 2019
Commented: Stephen23 on 14 Mar 2019
I have this for loop with conditionals inside it.
for i=1:m
for j=1:n
if (flipped_im(i,j,1)>flipped_im(i,j,2)) || (flipped_im(i,j,1)>flipped_im(i,j,3))
mod_im(i,j,:)=255;
else
mod_im(i,j,:)=flipped_im(i,j,:);
end
end
end
How I can turn this loop into vectorized code?
  2 Comments
Yaser Alghawi
Yaser Alghawi on 14 Mar 2019
It is an assignment. To optimize the speed of the program.

Sign in to comment.

Accepted Answer

Stephen23
Stephen23 on 14 Mar 2019
Edited: Stephen23 on 14 Mar 2019
In three lines, no loop:
>> new_im = flipped_im;
>> idx = new_im(:,:,1)>new_im(:,:,2) | new_im(:,:,1)>new_im(:,:,3);
>> new_im(idx(:,:,[1,1,1])) = 255;
and checking:
>> isequal(mod_im,new_im)
ans = 1
For MATLAB versions R2016b and later you can simplify the index code:
idx = any(new_im(:,:,1)>new_im(:,:,2:3),3);
  1 Comment
Jan
Jan on 14 Mar 2019
Or in < R2016b:
idx = any(new_im(:,:, [1, 1]) > new_im(:,:, 2:3), 3);

Sign in to comment.

More Answers (1)

Yaser Alghawi
Yaser Alghawi on 14 Mar 2019
Thank you Chris and Jan. It did the trick.

Categories

Find more on Loops and Conditional Statements in Help Center and File Exchange

Tags

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!