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;

 Réponse acceptée

Jon
Jon le 16 Nov 2020
Modifié(e) : Jon le 16 Nov 2020

0 votes

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 commentaires

Mr.Chandler
Mr.Chandler le 16 Nov 2020
New randn value(n) must provide the condition ( 1 < abs(n) < 10 ) too.
Jon
Jon le 16 Nov 2020
Modifié(e) : Jon le 16 Nov 2020
while any(a<1) || any(abs(a)>10)
condition1 = a < 1;
a(condition1) = randn(sum(condition1),1);
condition2 = abs(a) > 10;
a(condition2) = randn(sum(condition2),1);
end
Mr.Chandler
Mr.Chandler le 16 Nov 2020
I tried the last updated version of your suggestion. However, the values should be in the interval [-10,-1]U[1,10]. In your code, condition = a<1 contains all the values which are less then 1. But it is not okay with the condition. Because, while <1 it contains also [-10,-1] interval but it doesn't need to be changed.
Jon
Jon le 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 le 16 Nov 2020
Thanks a lot. This solved my problem exactly.

Connectez-vous pour commenter.

Plus de réponses (0)

Produits

Version

R2018a

Community Treasure Hunt

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

Start Hunting!

Translated by