develooper Front page | perl.perl6.language | Postings from May 2005

Re: hyperoperators and multi-dimensional datastructures

Thread Previous | Thread Next
From:
Edward Cherlin
Date:
May 20, 2005 13:00
Subject:
Re: hyperoperators and multi-dimensional datastructures
Message ID:
200505201304.45242.cherlin@pacbell.net
On Thursday 19 May 2005 12:48, Uri Guttman wrote:
> >>>>> "LP" == Luke Palmer <lrpalmer@gmail.com> writes:
>
>   LP> On 5/18/05, Anthony Heading <ajrh@ajrh.net> wrote:
>   >> Is there a way to target hyperoperators at different axes
>   >> of a multi-dimensional array?  This is an attractive
>   >> feature of various APL-like languages, viz. e.g. in J:
>   >>
>   >> a =. 2 5 $ i. 7      - a simple 2-by-5 array
>   >> a
>   >> 0 1 2 3 4               - like this
>   >> 5 6 0 1 2
>   >>
>   >>
>   >> +/"1 a              - sum reduce over axis 1
>   >> 10 14

That is, break the array into rows, and reduce each row.

>   LP>     [+]<< @a
>
>   >> +/"2 a              - sum reduce over axis 2
>   >> 5 7 2 4 6

Actually, that's sum reduce over planes, which gives the default 
behavior when applied to a single plane, of breaking the plane 
into rows, and adding the rows to each other. The result is the 
same as from +/a .

The rank conjunction (") is tersely explained at
http://www.jsoftware.com/books/help/dictionary/intro20.htm
and more fully in The J Primer, J for C Programmers, and other 
online publications at
http://www.jsoftware.com/publications_books.htm

>   LP> Can't think of any for this one.  Or maybe it's this one
> that I can LP> think of it for, and the other one which I
> can't.
>
> i can't spit out the syntax but here is the conceptual way i
> would do it. we do have multidimensional slices so we could
> grab each slice (maybe with zip?) and pass that to [+] and
> then grab the list of results back into a array/matrix with
> one less dimension than the original.

Exactly how Iverson conceived rank for reduction.

> so it would be something like this: (very wacko pseudo code):
>
> 		@in[ * ; 2 ; * ] ==>
> 		map [+] ==>
> 		@out
>
> that was an (bad) attempt to slice the third entry in the
> second dimension to be summed.

You might find it useful to examine this published source code 
for an early version of J
http://www.math.uwaterloo.ca/apl_archives/j/early_j/src/j7/
to see how Iverson's crew implemented rank.

The numbering is confusing, because they restarted at some point, 
so J5.0.4 is current.

>   LP> I think we're beginning to re-invent PDL.  

APL and J, too.

>   Poorly. 

Amen.

> but is there a p6 pdl yet? they may not need much with
> multi-dim ops, slices, hyper and reduce all built in! also
> with type int (patform ints), they can get the dense storage
> needed (but losing any dimensional flexibility).
>
> uri

-- 
Edward Cherlin
Generalist & activist--Linux, languages, literacy and more
"A knot! Oh, do let me help to undo it!"
--Alice in Wonderland
http://cherlin.blogspot.com

Thread Previous | Thread Next


nntp.perl.org: Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at ask@perl.org | Group listing | About