Posted by
Mark Osborne on
URL: http://imagej.273.s1.nabble.com/Gaussian-Random-Number-Generation-tp5021203p5021205.html
Greg
Something like the following macro should work...
var U; var V;
function normal(){
S = 2;
while(S >= 1){
U = -1+2*random; // uniform random no. -1..1
V = -1+2*random;
S = U*U+V*V;
}
}
X = U * sqrt(-2*log(S)/S); //or
Y = V * sqrt(-2*log(S)/S); // where log in ImageJ is natural ln
X and Y are independent standard normally distributed random numbers, so you can multiply by a finite standard deviation to spread beyond unit STD and add to a mean to get the Gaussian. Check against the Marsaglia polar method of generating normally distributed random numbers. Bit wasteful finding S<1, but easy to check and rather more intuitive than some.
Mark
-----Original Message-----
From: ImageJ Interest Group [mailto:
[hidden email]] On Behalf Of Seitz Arne
Sent: 19 September 2018 13:33
To:
[hidden email]
Subject: Re: Gaussian Random Number Generation
Dear Greg,
the RandomJ plugin from Eric Meijering looks to me what you are asking for.
https://imagescience.org/meijering/software/randomj/The only limitation it works on images. However it is macro recordable and the source code can be found on GitHub.
Best
Arne
-----Original Message-----
From: ImageJ Interest Group [mailto:
[hidden email]] On Behalf Of JAMES, gregory (SANDWELL AND WEST BIRMINGHAM HOSPITALS NHS TRUST)
Sent: mercredi 19 septembre 2018 14:09
To:
[hidden email]
Subject: Gaussian Random Number Generation
Dear ImageJ community,
You are an intelligent group of people so I would like to ask this...
Does anyone have a clever way of generating a random set of numbers that conform to a normal (Gaussian) distribution for a given mean and standard deviation using the 'random' macro function? I acknowledge that the ImageJ macro language is a slightly strange place to do this but I cannot use Excel because my data sets are so large and I would rather not learn a new scripting language (e.g. R).
For what it's worth, it is quite straightforward to do in Excel using =NORMINV(RAND(), mean, stdev). Does anyone have a clever way of replicating this function in ImageJ?
Many thanks,
Greg.
__________________________________________
Gregory James
Clinical Scientist (Nuclear Medicine)
Department of Physics and Nuclear Medicine City Hospital Dudley Road Birmingham
B18 7QH
0121 507 4043
********************************************************************************************************************
This message may contain confidential information. If you are not the intended recipient please inform the sender that you have received the message in error before deleting it.
Please do not disclose, copy or distribute information in this e-mail or take any action in relation to its contents. To do so is strictly prohibited and may be unlawful. Thank you for your co-operation.
NHSmail is the secure email and directory service available for all NHS staff in England and Scotland. NHSmail is approved for exchanging patient data and other sensitive information with NHSmail and other accredited email services.
For more information and to find out how you can switch,
https://portal.nhs.net/help/joiningnhsmail--
ImageJ mailing list:
http://imagej.nih.gov/ij/list.html--
ImageJ mailing list:
http://imagej.nih.gov/ij/list.html--
ImageJ mailing list:
http://imagej.nih.gov/ij/list.html