Speed up a for loop in my programme?

조회 수: 1 (최근 30일)
Alberto Paniate
Alberto Paniate 2021년 7월 29일
답변: Eike Blechschmidt 2021년 7월 30일
Hi, one of the part of my programme contains this piece of code:
size2=2500;
gran=3;
A=ones(size2,size2);
for k=1:gran:(size2-gran)
for j=1:gran:(size2-gran)
X=rand*2*pi-pi;
for h=1:gran
for l=1:gran
A(k+l-1,j+h-1) = A(k+l-1,j+h-1) *exp(+1i*X); %phase in the square gran x gran
end
end
end
end
My pc runs this code in 0.60 seconds but I would like to know if it is possible to speed up this process.
I have already looked similar questions like:
but I don't know if I can apply to my problem
  댓글 수: 2
Yongjian Feng
Yongjian Feng 2021년 7월 29일
Can this be written as matrix operations? If so, then use the corresponding matlab matrix operation. Then Matlab might be able to optimize the process for you.
Alberto Paniate
Alberto Paniate 2021년 7월 29일
I don't know, I have to create a matrix X of random numbers each square of sides gran x gran. In these squares the randoms numbers are equal

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

답변 (1개)

Eike Blechschmidt
Eike Blechschmidt 2021년 7월 30일
If I understood you right this could do the trick and is about 2.5x faster on my machine.
tic();
X=rand(size2*size2,1)*2*pi-pi;
[row,col] = ind2sub([size2, size2],1:size2*size2);
blockRow = ceil(row/gran);
blockCol = ceil(col/gran);
idx = sub2ind([size2/gran, size2/gran], blockRow, blockCol);
A = ones(size2, size2);
A(1:size2*size2) = exp(+1i*X(idx));
toc();
Important to not is that size2 needs to be a multiple of gran to for this solution to work.

카테고리

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

Community Treasure Hunt

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

Start Hunting!

Translated by