Thanks, that saves me a bit of time. All this business reminds me why I've virtually abandoned APL for J.
On Wed, May 18, 2011 at 7:20 AM, Roger Hui <[email protected]> wrote: > Yes, that's Dyalog APL and yes that ⎕ml←3 is to get > the APL2 version of the dyad ⊂ . In APL2 itself: > > ⎕cr 'Key' > z←x(f Key)y;i;j > z←f¨i[j]⊂y[j←⍋i←1+x⍳x] > > x +/Key y > 620 530 300 > > Note that in both Dyalog APL and APL2 the ⍳ > and the [] (i. and { in J) restrict the use > of Key to vector arguments. These can not be > overcome easily. > > > > ----- Original Message ----- > From: Ian Clark <[email protected]> > Date: Tuesday, May 17, 2011 22:48 > Subject: Re: [Jprogramming] Aggregation > To: Programming forum <[email protected]> > >> This is Dyalog code, isn't it. >> >> The author is working with APL2 ...and an old version, I >> suspect. Does >> it even have direct definition, and []ML=3, which you need for >> the ⊂ >> ...I'm guessing? >> >> Trouble is, I've only just got hold of APL2 to play with, and I have >> to run it on an old noisy Win2000 I absolutely hate. I'm right >> out of >> my comfort zone here. But the APL2 will not be so very >> different. Once >> I've checked it out I'll communicate it to the author. Thank you, >> Roger. >> >> On Wed, May 18, 2011 at 6:06 AM, Roger Hui <[email protected]> wrote: >> > A more efficient version: >> > >> > Key←{⎕ML←3 ⋄ ⍺⍺¨i[j]⊂⍵[j←⍋i←1+⍺⍳⍺]} >> > x←1 1 1 1 2 2 2 33 33 33 >> > y←100 100 20 400 30 200 300 100 100 100 >> > x +/Key y >> > 620 530 300 >> > >> > >> > >> > ----- Original Message ----- >> > From: Roger Hui <[email protected]> >> > Date: Tuesday, May 17, 2011 16:14 >> > Subject: Re: [Jprogramming] Aggregation >> > To: Programming forum <[email protected]> >> > >> >> It should not be verbose even in APL: >> >> >> >> Key←{⍺⍺¨(↓(∪⍺)∘.=⍺)/¨⊂⍵} >> >> >> >> x←1 1 1 1 2 2 2 33 33 33 >> >> y←100 100 20 400 30 200 300 100 >> >> 100 100 >> >> x +/ Key y >> >> 620 530 300 >> >> >> >> p←10?10 >> >> x[p] >> >> 1 33 33 33 2 2 1 2 1 1 >> >> y[p] >> >> 20 100 100 100 300 200 400 30 100 100 >> >> x[p] +/ Key y[p] >> >> 620 300 530 >> >> >> >> >> >> >> >> ----- Original Message ----- >> >> From: Ian Clark <[email protected]> >> >> Date: Tuesday, May 17, 2011 15:28 >> >> Subject: Re: [Jprogramming] Aggregation >> >> To: Programming forum <[email protected]> >> >> >> >> > Thanks folx, that's pretty useful. >> >> > >> >> > Our author should be pleased to know it. He's been doing it a >> >> > long-winded way in APL. >> >> > >> >> > So... everyone on the list calls it "Key"...? >> >> > >> >> > Did I hear the term "sub-addition" once, in passing? >> >> > >> >> > >> >> > >> >> > On Tue, May 17, 2011 at 10:34 PM, Roger Hui >> >> <[email protected]> >> >> > wrote:> See http://www.jsoftware.com/jwiki/Essays/Key >> >> > > for some additional uses of "key". >> >> > > >> >> > > >> >> > > >> >> > > ----- Original Message ----- >> >> > > From: Marshall Lochbaum <[email protected]> >> >> > > Date: Tuesday, May 17, 2011 14:15 >> >> > > Subject: Re: [Jprogramming] Aggregation >> >> > > To: 'Programming forum' <[email protected]> >> >> > > >> >> > >> The standard solution would be to use key (/.): >> >> > >> +//./ |: arr >> >> > >> >> >> > >> The three slashes in a row make this a bit confusing, but >> >> it is >> >> > >> equivalentto >> >> > >> ({."1 (+/)/. {:"1) arr >> >> > >> where key is the really important part. >> >> > >> >> >> > >> Marshall >> >> > >> >> >> > >> -----Original Message----- >> >> > >> From: [email protected] >> >> > >> [mailto:[email protected]] On Behalf Of >> Ian Clark >> >> > >> Sent: Tuesday, May 17, 2011 5:09 PM >> >> > >> To: Programming forum >> >> > >> Subject: [Jprogramming] Aggregation >> >> > >> >> >> > >> I'm being lazy here. But I need a better answer than I >> can devil >> >> > >> out myself. >> >> > >> It occurs in a recent submission to Vector... >> >> > >> >> >> > >> I have an array like this (which may be unsorted, and >> can grow >> >> > >> very large): >> >> > >> >> >> > >> 1 100 >> >> > >> 1 100 >> >> > >> 1 20 >> >> > >> 1 400 >> >> > >> 2 30 >> >> > >> 2 200 >> >> > >> 2 300 >> >> > >> 33 100 >> >> > >> 33 100 >> >> > >> 33 100 >> >> > >> >> >> > >> I want to collapse it to: >> >> > >> >> >> > >> 1 620 >> >> > >> 2 530 >> >> > >> 33 300 >> >> > >> >> >> > >> i.e. summing over subheadings. >> >> > >> The original example had A B C in place of 1 2 33, but >> >> > >> numbers will do, to >> >> > >> save boxing. We don't know the full set of A B C ... in >> advance.>> > >> Nothing to >> >> > >> be assumed about the first column, except it is >> >> > >> +ve integers. But I'm also interested in the case where >> the first >> >> > >> column lies in the set: i.(n) for some n>0. In other >> words they >> >> > >> can be >> >> > >> squashed up. >> >> > >> >> >> > >> 1. There's simply got to be a "jem" to do it. Suggestions, >> >> please.> >> - Transpose the array if you wish. Box it: 1 >> >> 100 ; 1 >> >> > 100 ; 1 20 ; >> >> > >> ... >> >> > >> -whatever. >> >> > >> - No, of course I don't want a looping solution :) >> >> > >> >> >> > >> 2. What do you call this process? I call it >> "aggregation" -- >> >> but >> >> > >> I think the >> >> > >> name differs across disciplines. > > ---------------------------------------------------------------------- > For information about J forums see http://www.jsoftware.com/forums.htm ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm
