Hi Linda, Basically tacit definitions contain no reference to their arguments. http://en.wikipedia.org/wiki/Tacit_programming
By that definition the following assignment isn't tacit because the "y" refers to the right argument. trian=: 13 :'-:y*>:y' However the resulting definition for trian is tacit: trian [: -: ] * >: As Bill suggests, 13 : '' is a useful tool for understanding how to convert explicit to tacit, but it won't necessarily generate "optimal" tacit definitions. On Thu, Aug 23, 2012 at 3:29 PM, Linda Alvord <[email protected]> wrote: > If you are able to use 5!:4 and get a tree, is that a way to tell if the > definition is tacit? > > Thanks for letting me know that I was not clear about tacit. > > Linda > > -----Original Message----- > From: [email protected] > [mailto:[email protected]] On Behalf Of Ric Sherlock > Sent: Wednesday, August 22, 2012 9:36 PM > To: [email protected] > Subject: Re: [Jprogramming] Creating random symmetric matrices > > 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 <[email protected]> > 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: [email protected] >> [mailto:[email protected]] On Behalf Of Henry >> Rich >> Sent: Wednesday, August 22, 2012 6:46 PM >> To: [email protected] >> 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 <[email protected]> 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 >>>> <[email protected]> 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" >>>>>>>> <[email protected]> >> 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 > > ---------------------------------------------------------------------- > For information about J forums see http://www.jsoftware.com/forums.htm ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm
