Vecorize NORMRND for a family of distributions

3 visualizaciones (últimos 30 días)
John Adcox
John Adcox el 30 de Oct. de 2014
Comentada: John Adcox el 3 de Nov. de 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

Respuesta aceptada

Ilya
Ilya el 3 de Nov. de 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 comentario
John Adcox
John Adcox el 3 de Nov. de 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;

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Mathematics en Help Center y File Exchange.

Productos

Community Treasure Hunt

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

Start Hunting!

Translated by