Vecorize NORMRND for a family of distributions

3 vues (au cours des 30 derniers jours)
John Adcox
John Adcox le 30 Oct 2014
Commenté : John Adcox le 3 Nov 2014
Hey everyone!
So, I am looking for a way to speed up my code. I have a large vector of normal distributions (i.e. a vector of means and standard deviations) that I need to generate random numbers from. A generic example of my code looks like this:
tic
N=1e6;
mu = rand(N,1);
sigma = rand(N,1);
temp = zeros(length(mu),1);
for i = 1:length(mu)
temp(i) = normrnd(mu(i),sigma(i));
end
toc
This code in its current form has an elapsed time of:
Elapsed time is 12.281509 seconds.
I normally try to vectorize most of computationally intensive commands, but right now I am stumped as to how I can make this run faster. I will have to perform this operation multiple times every time that the code is run, so the faster I can make it the better.
Do any of you MATLAB geniuses out there have any thoughts of how to speed this up?
Thanks! John

Réponse acceptée

Ilya
Ilya le 3 Nov 2014
Replace
temp = zeros(length(mu),1);
for i = 1:length(mu)
temp(i) = normrnd(mu(i),sigma(i));
end
with
temp = normrnd(mu,sigma);
  1 commentaire
John Adcox
John Adcox le 3 Nov 2014
Thank you llya. This does work. Apparently, for some reason my mind was not working clearly earlier and I missed this simple solution.
Another solution proposed elsewhere would be to do the following:
N=1e6;
mu = rand(N,1);
sigma = rand(N,1);
temp = randn(size(sigma)).*sigma + mu;

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Mathematics dans Help Center et File Exchange

Produits

Community Treasure Hunt

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

Start Hunting!

Translated by