How vectorize this loop
1 view (last 30 days)
Show older comments
x=8
a=magic(x)
b=[15 7 3 4 9 0 9 4] ====> 0 is important to test it
1 method with loop
c=a;
tic
for i=1:height(a)
for j=1:width(a)
if b(j)~=0
c(i,j)=min(a(i,j),b(j));
end
end
end
toc
tic
2 method with loop
z=a.*(~b>0)+min(a,b);
toc
isequal(c,z)
%cù
hi...I'm learning how to vectorize matrices...is it correct or can it be improved?
0 Comments
Accepted Answer
Bruno Luong
on 23 Jul 2023
Edited: Bruno Luong
on 23 Jul 2023
repmat is not needed (thanks to auto expension)
columns = 8;
a = magic(columns);
b = [15, 7, 3, 4, 9, 0, 9, 4]; % ====> 0 is important to test it
b2 = b;
b2(b2 == 0) = inf;
% Find the minimum of a or b2
minValues = min(a, b2) % What you call "c"
1 Comment
Image Analyst
on 23 Jul 2023
@Luca Re forgot to enter his release. I don't know when auto expansion was introduced (and it's hard to find out that year in the help documentation) so I gave the version with manual expansion just to make sure he had something that worked. Of course if your version works for him, then he has a recent version and this is even more vectorized than mine.
More Answers (1)
Image Analyst
on 23 Jul 2023
Sounds a lot like a homework assignment, but I'm going to assume it's not and give one possible solution:
columns = 8;
a = magic(columns);
b = [15, 7, 3, 4, 9, 0, 9, 4]; % ====> 0 is important to test it
% Fill out b so that it's a matrix the same size as a
b2 = repmat(b, [columns, 1]);
% Get rid of zeros
b2(b2 == 0) = inf
% Find the minimum of a or b2
minValues = min(a, b2) % What you call "c"
3 Comments
Stephen23
on 23 Jul 2023
"My sokution is not correct?"
That depends: are negative values within scope?
See Also
Categories
Find more on Loops and Conditional Statements in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!