Filter löschen
Filter löschen

My code taking too much time

1 Ansicht (letzte 30 Tage)
Mr.Chandler
Mr.Chandler am 16 Nov. 2020
Bearbeitet: Mr.Chandler am 16 Nov. 2020
Here is my code. How can I reduce that time without changing the result?
clear all;clc;close all;
L=1000;
c = randn(1,1000000);
cont3 = 1;
while cont3 < length(c)+1
if(abs(c(cont3)) < 1 || abs(c(cont3)) > 10)
c(cont3) = randn(1);
cont3 = 0;
end
cont3 = cont3+1;
end
c;

Akzeptierte Antwort

Jon
Jon am 16 Nov. 2020
Bearbeitet: Jon am 16 Nov. 2020
You can operate on the entire vector using for example
a(a<1) = randn
So you could make a loop something like
while any(a<1) || any(a>10)
a(a<1) = randn(sum(a<1),1)
a(a>10) = randn(sum(a>10),1)
end
  5 Kommentare
Jon
Jon am 16 Nov. 2020
Sorry I didn't look at your specification carefully. Anyhow you should be able to modify
while any(abs(a)<1) || any(abs(a)>10)
condition1 = abs(a) < 1;
a(condition1) = randn(sum(condition1),1);
condition2 = abs(a) > 10;
a(condition2) = randn(sum(condition2),1);
end
Mr.Chandler
Mr.Chandler am 16 Nov. 2020
Thanks a lot. This solved my problem exactly.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu Environment and Settings finden Sie in Help Center und File Exchange

Produkte


Version

R2018a

Community Treasure Hunt

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

Start Hunting!

Translated by