That (4&$.)^:_1 does not return the original table is not important to me. That it returns a useful result is.
------------------------------------------------------------------------ |\/| Randy A MacDonald | APL: If you can say it, it's done.. (ram) |/\| [EMAIL PROTECTED] | |\ | | The only real problem with APL is that BSc(Math) UNBF'83 | it is "still ahead of its time." Sapere Aude | - Morten Kromberg Natural Born APL'er | Demo website: http://156.34.82.188/ -----------------------------------------------------(INTP)----{ gnat }- ----- Original Message ----- From: "Dan Bron" <[EMAIL PROTECTED]> To: "'Programming forum'" <[email protected]> Sent: Sunday, February 04, 2007 4:09 AM Subject: RE: [Jprogramming] Spare Matrix from Index Matrix > Randy, > > Raul was pointing out that assuming 4&$. refers to all 1s is not enough. This is because in a sparse array, not every axis has > to be sparse. Look at Roger's first two examples: > > (2;0)$.4 5$1 > 0 | 1 1 1 1 1 > 1 | 1 1 1 1 1 > 2 | 1 1 1 1 1 > 3 | 1 1 1 1 1 > > (2;0)$.4 7$1 > 0 | 1 1 1 1 1 1 1 > 1 | 1 1 1 1 1 1 1 > 2 | 1 1 1 1 1 1 1 > 3 | 1 1 1 1 1 1 1 > > The 4&$. are exactly the same, and both refer to all 1s, but the arrays are different. So the "all ones" assumption is > insufficient: you'd have to know the shape of the original array, and which axes were specified to be sparse. > > But, if I understand you correctly, you're suggesting Roger assume 4&$. refers to all SCALAR 1s; i.e., 4&$.^:_1 should > produce a two dimensional boolean array, and both axes should be sparse. > > Maybe that assumption is too restrictive to be useful, especially given that 1&$. already provides a more general mechanism? > > In any case, Raul's post was relevant because: > > RM> #(,m)-.0 1 > RM> 0 > > proves that the array contains only 0s and 1s, and > > RM> 3 $.m > RM> 0 > > proves that the sparse element is zero. So if the sparse element is 0, and the array only contains 0 and 1, then 4&$. only > refers to 1s [A]. > > Raul was demonstrating that even if you know that, you still can't recover s : > > test =: ('passed'"_) @: (verb define) :: ('failed'"_) > assert. 0 -: #(,y)-.0 1 > assert. 84 -: +/,y > assert. 105 -: */$y > assert. 0 -: 3 $. y > assert. (i.4 1) -: 4 $. y > ) > > > m0 =. 1 (i.4) } 1 $. (5 21 ) ; (,0) ; 0 > m1 =. 1 (i.4) } 1 $. (5 3 7) ; (,0) ; 0 > > test m0 > passed > > test m1 > passed > > m0 -: m1 > 0 > > The arrays are different (in shape), yet 4&$. is the same, and refers to all 1s in each case. > > -Dan > > [A] Actually, these two tests don't prove that 4&$. refers to all 1s, c.f. Roger's s4 : > > s4 > 0 | 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ... > 1 | 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ... > 2 | 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ... > 3 | 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ... > > > ---------------------------------------------------------------------- > For information about J forums see http://www.jsoftware.com/forums.htm > ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm
