Just a pedantic nitpick with regard to terminology here. Ewart's verbs were already tacit. I think the key thing that your versions show is how that tacit translates to explicit and then how 13 : retranslates them to another tacit version without hooks.
On Thu, Aug 23, 2012 at 12:45 PM, Linda Alvord <lindaalv...@verizon.net> wrote: > Ewart's function in tacit version: > > trian=: 13 :'-:y*>:y' > indsy=: 13 :'(>.|:i.y)+/tri i.y' > > indsy 4 > 0 1 3 6 > 1 2 4 7 > 2 3 5 8 > 3 4 6 9 > trian > [: -: ] * >: > indsy > ([: >. [: |: i.) +/ [: tri i. > > Linda > > > -----Original Message----- > From: programming-boun...@forums.jsoftware.com > [mailto:programming-boun...@forums.jsoftware.com] On Behalf Of Henry Rich > Sent: Wednesday, August 22, 2012 6:46 PM > To: programm...@jsoftware.com > Subject: Re: [Jprogramming] Creating random symmetric matrices > > Why yes, that's much better. Very clever way of filling the triangle. > > Henry Rich > > On 8/22/2012 4:28 PM, Ric Sherlock wrote: >> Note that Ewart Shaw has responded to this on the Wiki with a solution >> that only generates the required number of random numbers: >> http://www.jsoftware.com/jwiki/EwartShaw/RandomSymmetricMatrix >> >> On Wed, Aug 22, 2012 at 5:30 PM, Ric Sherlock <tikk...@gmail.com> wrote: >>> The other option is not to add them in the first place? >>> >>> load 'stats/distribs' >>> (|: + ~: zeroTri ) >: zeroTri rnorm 5 5 >>> 0.346799 _1.22161 0.57274 0.556122 _0.329658 >>> _1.22161 0.149955 _1.77435 _1.76668 0.831557 >>> 0.57274 _1.77435 0.77674 _0.0690683 _0.967551 >>> 0.556122 _1.76668 _0.0690683 0.720588 _0.195658 >>> _0.329658 0.831557 _0.967551 _0.195658 _0.12314 >>> >>> In other words zero the items above the diagonal then transpose and >>> add to the non-diagonal items. >>> >>> Where zeroTri is an adverb defined as below: >>> >>> NB.*zeroTri a Zeros triangular items of matrix determined by verb to left >>> NB. EG: < zeroTri mat NB. zeros lower-tri items of mat >>> NB. EG: <: zeroTri mat NB. zeros lower-tri, off-diag items of mat >>> NB. EG: > zeroTri mat NB. zeros upper tri items of mat >>> NB. EG: = zeroTri mat NB. zeros all off-diag items of mat >>> NB. EG: ~: zeroTri mat NB. zeros diag items of mat >>> zeroTri=: 1 :'([: u/~ i.@#) * ]' >>> >>> This is somewhat wasteful in that you generate a bunch of random >>> numbers that you then discard, but if that was an issue you could >>> work around it. >>> >>> >>> On Wed, Aug 22, 2012 at 5:07 PM, Owen Marschall >>> <omarschal...@amherst.edu> wrote: >>>> You read my mind. I was thinking about this same problem tonight while > at the opera, and I couldn't think of any way to only divide the diagonals > by sqrt(2) a second time--without loops, of course. I don't quite yet > understand why your solution works, but I'm sure with enough staring and > dictionary help I'll get it. >>>> >>>> Thanks, >>>> Owen >>>> >>>> On Aug 21, 2012, at 8:25 PM, Henry Rich wrote: >>>> >>>>> If you have a matrix a of standard normal deviates, you can make it >>>>> symmetric with >>>>> >>>>> asymm =: (+ |:) a >>>>> >>>>> but what is the variance of the items of a? >>>>> >>>>> The variance of values off the principal diagonal will be the sum of > the variance of two independent standard normal deviates. i.e. 2. >>>>> >>>>> To return these values to variance 1 you need to divide by sqrt(2). >>>>> >>>>> But the variance of values ON the principal diagonal will be the sum of > two perfectly correlated random variables, i. e. 4. >>>>> >>>>> So you need to treat the principal diagonal differently. You can > reduce its variance by scaling it differently after the conversion to > symmetric, dividing the diagonal by sqrt(4) and the rest by sqrt(2): >>>>> >>>>> asymmgood =: asymm % %: +: >: e. i. # asymm >>>>> >>>>> (The e. i. bit is a standard idiom for making an identity matrix. > Another one you see around is = i. but I avoid that because I think monad > = was wrongly defined and should be assigned for other purposes) >>>>> >>>>> If I've made a statistical blunder I'm sure someone will tell me. >>>>> >>>>> Henry Rich >>>>> >>>>> On 8/21/2012 3:10 PM, Owen Marschall wrote: >>>>>> Ah, just what I needed. Thanks! >>>>>> >>>>>> On Aug 21, 2012, at 1:06 PM, Ric Sherlock wrote: >>>>>> >>>>>>> The primitive ( |: ) is transpose. E.g. : >>>>>>> >>>>>>> |: i. 3 4 >>>>>>> 0 4 8 >>>>>>> 1 5 9 >>>>>>> 2 6 10 >>>>>>> 3 7 11 >>>>>>> On Aug 22, 2012 6:55 AM, "Owen Marschall" <omarschal...@amherst.edu> > wrote: >>>>>>> >>>>>>>> Anyone know of an easy way to create a random symmetric matrix >>>>>>>> (more specifically, a matrix whose entires are each picked from >>>>>>>> a standard Gaussian distribution)? I can start by doing >>>>>>>> >>>>>>>> load 'stats' >>>>>>>> R=:normalrand N N >>>>>>>> >>>>>>>> but this is not symmetric, and I don't know of any way to >>>>>>>> symmetrize it without thinking in loops, which I'm training >>>>>>>> myself not to. If I could somehow take a transpose, that would >>>>>>>> solve the problem, but I don't know how to do that either. >>>>>>>> >>>>>>>> Thanks, >>>>>>>> Owen >>>>>>>> ---------------------------------------------------------------- >>>>>>>> ------ 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 >> > ---------------------------------------------------------------------- > 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