How to avoid double for-loop

9 Ansichten (letzte 30 Tage)
Lucius
Lucius am 21 Apr. 2015
Kommentiert: Star Strider am 21 Apr. 2015
I have the following code
for n = 1:N
for l = 1:N
phase = exp(1i * (rand*0.5*pi-0.25*pi));
Efield_x(n,l) = Efield_x(n,l) .* phase;
end
end
with N=2^10 . Each matrix element should be multiplied with a different random number from -0.25*pi to 0.25*pi . Although the computer is running ("busy") I am waiting for 15 minutes now. How can we avoid this slow double for-loop to fasten to process significantly? By the way, I have 8 GB Ram.

Akzeptierte Antwort

Star Strider
Star Strider am 21 Apr. 2015
This seems to work:
N = 2^10;
Efield_x = ones(N); % Create Data
phase = exp(1i * (rand(N)-0.5)*0.25*pi);
Efield_x = Efield_x .* phase;
  2 Kommentare
Lucius
Lucius am 21 Apr. 2015
Bearbeitet: Lucius am 21 Apr. 2015
you mean
...(rand(N)-0.5)*0.5*pi);
This works, thanks.
Star Strider
Star Strider am 21 Apr. 2015
My pleasure.
You’re correct on ‘phase’, with 0.5 rather than 0.25 as the multiplier to produce ±0.25*pi.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu Loops and Conditional Statements finden Sie in Help Center und File Exchange

Produkte

Community Treasure Hunt

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

Start Hunting!

Translated by