Same as i.@# in =@i.@# It's generating a list of distinct values which = will use to construct an identity matrix.
Mind you, it might have made more sense for = to always construct identity matrices. But in terms of time, constructing an identity matrix is O(n^2) and \: is O(n log n) or better (if it's using bin sort, which I am not sure it ever is), and identity matrix construction is usually not a bottleneck even in situations where it's used a lot. So, as Roger Hui put it: Bravo! Thanks, -- Raul On Thu, Feb 27, 2014 at 1:36 AM, Michal Wallace <[email protected]> wrote: > What purpose does the \: serve there? > > (*=) 9 7 5 3 > > 9 0 0 0 > > 0 7 0 0 > > 0 0 5 0 > > 0 0 0 3 > > > > > On Wed, Feb 26, 2014 at 11:48 PM, J. Patrick Harrington > <[email protected]>wrote: > >> even shorter: >> >> diag4=: *=@\: >> >> diag4 9 7 5 3 >> 9 0 0 0 >> 0 7 0 0 >> 0 0 5 0 >> 0 0 0 3 >> Patrick >> >> >> On Wed, 26 Feb 2014, km wrote: >> >>> (*"0 1 =@i.@#) 1 2 3 >>> 1 0 0 >>> 0 2 0 >>> 0 0 3 >>> >>> --Kip Murray >>> >>> Sent from my iPad >>> >>> On Feb 26, 2014, at 9:35 PM, Roger Hui <[email protected]> >>>> wrote: >>>> >>>> diag=: 3 : 'y (,&.>~i.#y)} 0 $~ ,~#y' >>>> diag 10 20 30 40 >>>> 10 0 0 0 >>>> 0 20 0 0 >>>> 0 0 30 0 >>>> 0 0 0 40 >>>> >>>> diag1=: ]\ * =/~@i.@# >>>> diag1 10 20 30 40 >>>> 10 0 0 0 >>>> 0 20 0 0 >>>> 0 0 30 0 >>>> 0 0 0 40 >>>> >>>> diag2=: -@>:@i.@# {."0 ] >>>> diag2 10 20 30 40 >>>> 10 0 0 0 >>>> 0 20 0 0 >>>> 0 0 30 0 >>>> 0 0 0 40 >>>> >>>> diag3=: ,~@# $ ] #~ 1 j. # >>>> diag3 10 20 30 40 >>>> 10 0 0 0 >>>> 0 20 0 0 >>>> 0 0 30 0 >>>> 0 0 0 40 >>>> >>>> >>>> >>>> >>>> >>>> On Wed, Feb 26, 2014 at 7:12 PM, Joe Bogner <[email protected]> >>>>> wrote: >>>>> >>>>> Sorry, I figured it out: >>>>> >>>>> I just needed one more 0... >>>>> >>>>> ] S * (4 4 $ 1 0 0 0 0) >>>>> 4 0 0 0 >>>>> 0 3 0 0 >>>>> 0 0 2.23607 0 >>>>> 0 0 0 0 >>>>> >>>>> On Wed, Feb 26, 2014 at 10:02 PM, Joe Bogner <[email protected]> >>>>>> wrote: >>>>>> I'm experimenting with svd and am looking for a nicer way of creating >>>>>> a matrix from the S diagonal >>>>>> >>>>>> 4 3 2.23607 0 >>>>>> >>>>>> needs to be >>>>>> >>>>>> ] (4 4 $ 4 0 0 0 0 3 0 0 0 0 2.23607 0 0 0 0 0 ) >>>>>> 4 0 0 0 >>>>>> 0 3 0 0 >>>>>> 0 0 2.23607 0 >>>>>> 0 0 0 0 >>>>>> >>>>>> What would be the idiomatic way to make that conversion? I tried >>>>>> various versions of reshape and insert. >>>>>> >>>>>> Not quite... >>>>>> >>>>>> ],\ S >>>>>> 4 0 0 0 >>>>>> 4 3 0 0 >>>>>> 4 3 2.23607 0 >>>>>> 4 3 2.23607 0 >>>>>> >>>>>> I also thought about multiplying it by a diagonal matrix of 0s and 1s >>>>>> but couldn't get that figured out either >>>>>> >>>>>> Thanks >>>>>> Joe >>>>>> >>>>> ---------------------------------------------------------------------- >>>>> For information about J forums see http://www.jsoftware.com/forums.htm >>>>> >>>> ---------------------------------------------------------------------- >>>> For information about J forums see http://www.jsoftware.com/forums.htm >>>> >>> ---------------------------------------------------------------------- >>> For information about J forums see http://www.jsoftware.com/forums.htm >>> >>> ---------------------------------------------------------------------- >> For information about J forums see http://www.jsoftware.com/forums.htm >> > ---------------------------------------------------------------------- > For information about J forums see http://www.jsoftware.com/forums.htm ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm
