How vectorize this loop

조회 수: 1 (최근 30일)
Luca Re
Luca Re 2023년 7월 23일
댓글: Image Analyst 2023년 7월 23일
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?

채택된 답변

Bruno Luong
Bruno Luong 2023년 7월 23일
편집: Bruno Luong 2023년 7월 23일
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"
minValues = 8×8
15 2 3 4 9 6 7 4 9 7 3 4 9 51 9 4 15 7 3 4 9 43 9 4 15 7 3 4 9 30 9 4 15 7 3 4 9 38 9 4 15 7 3 4 9 19 9 4 15 7 3 4 9 11 9 4 8 7 3 4 4 62 9 1
  댓글 수: 1
Image Analyst
Image Analyst 2023년 7월 23일
@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.

댓글을 달려면 로그인하십시오.

추가 답변 (1개)

Image Analyst
Image Analyst 2023년 7월 23일
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
b2 = 8×8
15 7 3 4 9 Inf 9 4 15 7 3 4 9 Inf 9 4 15 7 3 4 9 Inf 9 4 15 7 3 4 9 Inf 9 4 15 7 3 4 9 Inf 9 4 15 7 3 4 9 Inf 9 4 15 7 3 4 9 Inf 9 4 15 7 3 4 9 Inf 9 4
% Find the minimum of a or b2
minValues = min(a, b2) % What you call "c"
minValues = 8×8
15 2 3 4 9 6 7 4 9 7 3 4 9 51 9 4 15 7 3 4 9 43 9 4 15 7 3 4 9 30 9 4 15 7 3 4 9 38 9 4 15 7 3 4 9 19 9 4 15 7 3 4 9 11 9 4 8 7 3 4 4 62 9 1
  댓글 수: 3
Stephen23
Stephen23 2023년 7월 23일
"My sokution is not correct?"
That depends: are negative values within scope?
Luca Re
Luca Re 2023년 7월 23일
편집: Luca Re 2023년 7월 23일
In matrix "a" yes...in array "b" no Ok i understand...thank

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 MATLAB에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by