Speed up a for loop in my programme?
1 回表示 (過去 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
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.
回答 (1 件)
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.
0 件のコメント
参考
カテゴリ
Help Center および File Exchange で Systems of Nonlinear Equations についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!