({.,#)/. is also supported by special code, and
({.,#)/.~y is the same as (~.y),.#/.~y .
However, ~.y on small range integers is also
fast so the differences are hard to discern.
Which one is faster depends on the specifics
of a particular problem.

   y=: 1e6 ?...@$ 50
   a=: (~.y) ,. #/.~ y
   b=: ({.,#)/.~ y
   a -: b
1

   100 timer '({.,#)/.~ y'
0.00704076
   100 timer '(~.y),.#/.~y'
0.0127395

   7!:2 '#/.~y'
1344



----- Original Message -----
From: Don Guinn <[email protected]>
Date: Sunday, April 25, 2010 20:32
Subject: Re: [Jprogramming] Random Numbers with interation
To: Programming forum <[email protected]>

> Neat. The other thing I did was use Nub to find out what the numbers
> associated with each group for Key. Is that optimized too? If so 
> then the
> code can't be improved much beyond your first suggestion.
> 
> On Sun, Apr 25, 2010 at 10:19 PM, Roger Hui <[email protected]> 
> wrote:
> > > I just did it the first and easiest way I thought of. Key is 
> probably not
> > a
> > > very efficient way to count the occurrences, but it is easy.
> >
> > We endeavor to make "easy" fast.
> >
> > Key _is_ the way to count # of occurrences in J and
> > there is special code for #/. (a JKT (Joey K. Tuttle) special).
> > It is especially fast for small range integers.
> >
> >   100 timer '#/.~x' [ x=: 1e6 ?...@$ 50
> > 0.00642733
> >   100 timer '#/.~x' [ x=: (1e6 ?...@$ 50){50 ?...@$ 2e9
> > 0.0305596
> >
> > The argument in the first benchmark has small range;
> > the one in the second benchmark has large range.
> > "Large" or "small" is relative to the length of the argument.
> >
> >
> >
> > ----- Original Message -----
> > From: Don Guinn <[email protected]>
> > Date: Sunday, April 25, 2010 17:34
> > Subject: Re: [Jprogramming] Random Numbers with interation
> > To: Programming forum <[email protected]>
> >
> > > That is really a significant improvement. I saw only 20%
> > > improvement over
> > > the whole process where the random number generation was 
> only a
> > > small part.
> > > I just did it the first and easiest way I thought of. Key is
> > > probably not a
> > > very efficient way to count the occurrences, but it is easy.
> > >
> > > On Sun, Apr 25, 2010 at 5:29 PM, Roger Hui 
> <[email protected]> wrote:
> > >
> > > > There are other situations where the expression I suggested
> > > > is much more economical than the one you used.  For 
> example:> > >
> > > >   ts=: 6!:2 , 7!:2...@]
> > > >
> > > >   10 ts '1e6 ?...@$ 2'
> > > > 0.0029846 1.04934e6
> > > >   10 ts '?1e6 $ 2'
> > > > 0.0132888 5.24352e6
> > > >
> > > > i.e. factor of 4 in time, factor of 5 in space.
> > > >
> > > >
> > > >
> > > > ----- Original Message -----
> > > > From: Don Guinn <[email protected]>
> > > > Date: Sunday, April 25, 2010 7:53
> > > > Subject: Re: [Jprogramming] Random Numbers with interation
> > > > To: Programming forum <[email protected]>
> > > >
> > > > > True. There is a lot that could be done to make it 
> faster. But
> > > > > it was so
> > > > > much faster I didn't bother. And as you say, if you 
> can't half
> > > > > the time,
> > > > > it's not worth doing. But I did try it. Looks like maybe 20%
> > > faster> >
> > > > > On Sun, Apr 25, 2010 at 9:18 AM, Roger Hui
> > > <[email protected]> wrote:
> > > > >
> > > > > > Slightly more economical to do 1...@#50 or 1...@$50
> > > > > > instead of ?1e6#50 .
> > > > > >
> > > > > >
> > > > > >
> > > > > > ----- Original Message -----
> > > > > > From: Don Guinn <[email protected]>
> > > > > > Date: Sunday, April 25, 2010 5:57
> > > > > > Subject: Re: [Jprogramming] Random Numbers with interation
> > > > > > To: Programming forum <[email protected]>
> > > > > >
> > > > > > > How about 0.07 seconds.
> > > > > > >
> > > > > > >    6!:2 '(1!:2&2)|."1]10{.\:~(>:~.z),.~
> > > > > #/.~z=.?1e6#50'> > 15 20400
> > > > > > >  8 20340
> > > > > > > 46 20287
> > > > > > > 13 20278
> > > > > > > 33 20249
> > > > > > > 39 20220
> > > > > > > 18 20219
> > > > > > > 29 20206
> > > > > > > 25 20197
> > > > > > >  9 20166
> > > > > > > 0.0658392
> > > > > > >
> > > > > > > On Sun, Apr 25, 2010 at 7:36 AM, smandula
> > > > > > > <[email protected]> wrote:
> > > > > > >
> > > > > > > >
> > > > > > > > Thank you kindly for your reply.
> > > > > > > > The statement of one million is an example, could be
> > > > > > > 1,000  or 50,000
> > > > > > > > iterations.
> > > > > > > > The random numbers being tested could be 1 to 50, 
> or 1
> > > to 100
> > > > > > > >
> > > > > > > > I have a basic program whereby I enter the maximum
> > > iterations,> > > > in the
> > > > > > > > example 1,000,000
> > > > > > > > and a time clock starts, and a counter starts counting
> > > up to
> > > > > > > the required
> > > > > > > > 1,000,000 intervals.
> > > > > > > >
> > > > > > > > Once, done the time duration shows, in my case 17
> > > minutes, and
> > > > > > > a list of 10
> > > > > > > > highest occurrences
> > > > > > > > for these random numbers. i.e.
> > > > > > > > number 29     
> occurrences  204,984
> > > > > > > > number 26     
> occurrences  204,855
> > > > > > > > number 40     
> occurrences  204,732
> > > > > > > > number 17     
> occurrences  204,629
> > > > > > > > Number  1
> > > occurrences  204,480
> > > > > > > >
> > > > > > > > I would appreciate any input from the forum,
> > > especially for
> > > > > > > faster times
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to