how to reduce computation time for nested loops
Show older comments
[N,M] = size(fft_img_test(:,:,1));
B = zeros(N,M,N,M);
for k=1:No_frames
for vy = 1:N
for vx = 1:M
for uy = 1:N
for ux = 1:M
u = uy+vy-2; v = ux+vx-2;
u = mod(u,N); v = mod(v,M);
u = u + 1; v = v + 1;
B(uy,ux,vy,vx) = B(uy,ux,vy,vx) + fft_img_test(uy,ux,k) * fft_img_test(vy,vx,k)...
* conj(fft_img_test(u,v,k));
end
end
end
end
end
phase_B = (angle(B/k));
5 Comments
Adam Danz
on 2 Jan 2020
It's easier if we can actually run the code but there are variable values missing that is preventing this. If you attach a mat file containing all needed variables to run the code, it would be helpful.
abdelelah alzahed
on 2 Jan 2020
Adam Danz
on 2 Jan 2020
You've got more than 536.8 million iterations (M * N * M * N * No_frames = 536870912).
Vectorization sometimes speeds up computation time but it's not always faster than loops and the expansion that may be required to do these computations using vectorization may exceed memory limits.
Could you explain in words the logic of this section below? It's not making much sense to me. When vx and vy equal 1, u and v are the same values as ux and uy. But then it starts to change when vx and vy are no longer 1.
u = uy+vy-2;
u = mod(u,N);
v = ux+vx-2;
v = mod(v,M);
u = u + 1;
v = v + 1;
conj(fft_img_test(u,v,k))
abdelelah alzahed
on 2 Jan 2020
Edited: abdelelah alzahed
on 2 Jan 2020
Adam Danz
on 2 Jan 2020
"Therefore, once u or v are greater than N and M, respectively, the command lines, as stated above, will restart the calculation of the conjugate term to the starting point (1,1). "
Then shouldn't u and v always equal uy and ux (which isn't the case)?
Accepted Answer
More Answers (0)
Categories
Find more on Loops and Conditional Statements in Help Center and File Exchange
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!