The space usage is larger enough that on larger arguments,
virtual memory comes into play. It'll skew the timings
in favor of the leaner solutions. Fortunately pair6a is
the champion in both time and space.
There are other methods if you need col0 and col1 separately.
e.g. col0 is ((-i.)y-1) # i.y-1
p=: pair6a y=: 1000
({."1 p) -: ((-i.)y-1) # i.y-1
1
({:"1 p) -: ; <\.}.i.y
1
----- Original Message -----
From: Matthew Brand <[EMAIL PROTECTED]>
Date: Friday, November 7, 2008 12:01
Subject: Re: [Jprogramming] pairs
To: Programming forum <[email protected]>
> Thanks guys, It just goes to show there is always more than one
> way to
> skin a cat!
>
> I am using it on a few thousand items so the speed up is greatly
> appreciated.
> ts=: 6!:2, 7!:[EMAIL PROTECTED]
> ts 'pair6a 4000'
> 0.330374 1.3422e8
> ts 'pairi 4000'
> 11.4952 4.02654e8
>
> Does anyone know why there is a limit error for pair6a 10000 but not
> when inside ts? Is there a way to use ts and get it to spit the answer
> out?
>
> ts 'pair6a 10000'
> 2.03573 1.07374e9
> pair6a 10000
> |limit error
>
>
>
> On Fri, Nov 7, 2008 at 7:14 PM, Roger Hui <[EMAIL PROTECTED]> wrote:
> > My favorite solution is Arie Groeneveld's pair3, but there
> > is a faster and leaner solution:
> >
> > pair6a=: 3 : 0
> > t=. ((2!y),2)$0 1+0
> > t=. (1,.-.(-i.)y-2) (}:+/\(-i.)y-1)}t
> > +/\t
> > )
> >
> > pair3=:[:;<@({.,.}.)[EMAIL PROTECTED]
> >
> > (pair3 -: pair6a) 1000
> > 1
> > ts=: 6!:2 , 7!:[EMAIL PROTECTED]
> >
> > 10 ts 'pair3 1000'
> > 0.0356751 9.63603e6
> > 10 ts 'pair6a 1000'
> > 0.0190992 8.39136e6
> >
> > Also, pair6a 1 gives a wrong answer.
> >
> >
> >
> > ----- Original Message -----
> > From: Devon McCormick <[EMAIL PROTECTED]>
> > Date: Friday, November 7, 2008 7:56
> > Subject: Re: [Jprogramming] pairs
> > To: Programming forum <[email protected]>
> >
> >> My timings agree with the ones on your clean system: "pair3" is
> >> fastest,followed by "pair2", then by "2&comb3"; all three are
> >> pretty close to each
> >> other and are much faster than the original "pairi":
> >>
> >> rnk2 100&ts&>'pairi y';'pair2 y';'2&comb3
> y';'pair3>> y' [ y=. 1000
> >> 3 29.78 2.61 0.484 2.517e7
> >> 1 1.17 1.00 0.019 9.640e6
> >> 2 1.20 1.00 0.020 9.636e6
> >> 0 1.00 1.00 0.016 9.636e6
> >>
> >> On Fri, Nov 7, 2008 at 10:28 AM, R.E. Boss
> >> <[EMAIL PROTECTED]> wrote:
> >>
> >> > On a cleaner system I get
> >> >
> >> > rnk2 5&ts&>'pair2 y';'2&comb3 y';'pair3 y'[y=.5000
> >> > 1 1.04 1.00 0.737 2.834e8
> >> > 2 1.11 1.00 0.791 2.833e8
> >> > 0 1.00 1.00 0.711 2.833e8
> >> >
> >> > rnk2=: 1 7j2 5j2 10j3 8j_3 ": (,.~[: (/:@/:@:({."1) ,.
> }."1) (%"1
> >> > <./)@:(,.~
> >> > */"1))
> >> NB. wrap around!
> >> >
> >> >
> >> > R.E. Boss
> >> >
> >> >
> >> > -----Oorspronkelijk bericht-----
> >> > Van: [EMAIL PROTECTED]
> >> > [mailto:[EMAIL PROTECTED] Namens Arie Groeneveld
> >> > Verzonden: vrijdag 7 november 2008 16:25
> >> > Aan: Programming forum
> >> > Onderwerp: Re: [Jprogramming] pairs
> >> >
> >> > I executed both lines, having different arguments, several times,
> >> > because I didn't get the same result as RE.Boss timings.
> >> >
> >> > 5j2": (%"1<./) 5&(6!:2)&>'pairi ry';'pair2
> >> ry';'2&comb3 ry'[ry=.1000
> >> > 34.34 1.00 1.04
> >> >
> >> >
> >> > Devon McCormick schreef:
> >> > > This looks like the usual variability of timing few
> >> iterations. If you
> >> > try
> >> > > this with 100 iterations, i.e.
> >> > >
> >> > > 5j2": (%"1<./) 100&(6!:2)&>'pair2
> >> ry';'pair3 ry' [ry=.25
> >> > >
> >> > > your results should be more stable.
> >> > >
> >> > > On Fri, Nov 7, 2008 at 9:38 AM, Arie Groeneveld
> >> <[EMAIL PROTECTED]>> wrote:
> >> > >
> >> > >
> >> > >> However....
> >> > >>
> >> > >> Executing the following two lines several times (sometimes
> >> I get erratic
> >> > >> results):
> >> > >>
> >> > >> 5j2": (%"1<./) 5&(6!:2)&>'pair2 ry';'pair3
> >> ry' [ry=.25
> >> > >> 1.00 1.34
> >> > >>
> >> > >> 5j2": (%"1<./) 5&(6!:2)&>'pair2 ry';'pair3
> >> ry' [ry=.1000
> >> > >> 1.02 1.00
> >> > >>
> >> > >>
> >> > >> Arie Groeneveld schreef:
> >> > >>
> >> > >>> Slower , but more concise
> >> > >>>
> >> > >>> pair3=:[:;<@({.,.}.)[EMAIL PROTECTED]
> >> > >>>
> >> > >>>
> >> > >>> Arie Groeneveld schreef:
> >> > >>>
> >> > >>>
> >> > >>>> pair2=:([:;],."0 _&.>[:<\.1&+)@i.@<:
> >> > >>>>
> >> > >>>> (pair2-:pairi) 100
> >> > >>>> 1
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm