Re: excessive LogNormalDistribution timing
- To: mathgroup at yoda.physics.unc.edu
- Subject: Re: excessive LogNormalDistribution timing
- From: withoff
- Date: Mon, 5 Oct 92 10:35:04 CDT
> Dear Mathgroupers, > > We need to draw random numbers from some of the continuous distributions > provided in the package Statistics`ContinuousDistributions` in Mma 2.0, but > we discovered a gross disparity in the timing for the LogNormalDistribution > which makes it almost impossible to use for real applications. Here is an > example (on a MacIIfx): > > ran1=Table[Random[ExponentialDistribution[1]], {100} ]//Timing > > {1. Second,...} > > ran2=Table[Random[NormalDistribution[0,1]], {100} ]//Timing > > {1.61667 Second,...} > > ran3=Table[Random[LogNormalDistribution[0,1]], {100} ]//Timing > > {110.7 Second,...} > > There is a factor of 50-100 disparity. Yet LogNormalDistribution only > involves one extra Log evaluation compared to ExponentialDistribution or > NormalDistribution. What can possibly be wrong here? > > ------------------------------------------- > Dr. Warren J. Wiscombe > NASA Goddard, Code 913, Greenbelt, MD 20771 > (301) 286-8499 The formula in Statistics`ContinuousDistributions` for random numbers with a LogNormalDistribution computes quantiles of uniformly distributed random numbers, while the formula for random numbers with a NormalDistribution uses a much faster formula. The faster formula can be used for both distributions. In[4]:= Do[Random[LogNormalDistribution[0, 1]], {100}] //Timing Out[4]= {60.9333 Second, Null} In[13]:= LogNormalDistribution/: Random[LogNormalDistribution[mu_, sigma_]] := Exp[mu + sigma Sqrt[-2 Log[Random[]]] Cos[2Pi Random[]]] In[14]:= Do[Random[LogNormalDistribution[0, 1]], {100}] //Timing Out[14]= {0.566667 Second, Null} In many cases a number of other things can be done for further speed improvements, (use low-precision formulas for quantiles, generate numbers in pairs, etc.), but I am not an expert on the subject. Perhaps someone who is could help out.