How vectorize this loop
1 Ansicht (letzte 30 Tage)
Ältere Kommentare anzeigen
Luca Re
am 23 Jul. 2023
Kommentiert: Image Analyst
am 23 Jul. 2023
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 Kommentare
Akzeptierte Antwort
Bruno Luong
am 23 Jul. 2023
Bearbeitet: Bruno Luong
am 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 Kommentar
Image Analyst
am 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.
Weitere Antworten (1)
Image Analyst
am 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 Kommentare
Stephen23
am 23 Jul. 2023
"My sokution is not correct?"
That depends: are negative values within scope?
Siehe auch
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!