What is the advantage of a "dyad" definition?
randStringB=: 4 : '(? y $ #x) { x'
rSB=: 13 :'(?y$#x){x'
randStringB
4 : '(? y $ #x) { x'
rSB
[ {~ [: ? ] $ [: # [
L randStringB 10
DABDABDABA
L rSB 10
ACBCDADDDA
Linda
-----Original Message-----
From: [email protected]
[mailto:[email protected]] On Behalf Of Ric Sherlock
Sent: Thursday, August 23, 2012 6:50 AM
To: [email protected]
Subject: Re: [Jprogramming] Creating random symmetric matrices
I think your analogy is very apt. IMO the first one is verbose with needless
repetition, while the second is more concise and elegant.
Compare randStrngC and randStrngX (or randStrngG) in the Guide I linked to
earlier. The latter two do a much better job of concisely representing the
processing required. Of course some might also argue that the explicit
randStrngB is clearest.
randStrngC=: [ {~ [: ? ] $ [: # [
randStrngX=: (?@$ #) { ]
randStrngG=: ((?@$ #) { ])~
randStrngB=: 4 : '(? y $ #x) { x'
On Thu, Aug 23, 2012 at 10:37 PM, Linda Alvord <[email protected]> wrote:
> She went to the store and bought apples and bananas and oranges and grapes
> and cherries and pineapple.
>
> Or
>
> She went to the store and bought apples, bananas, oranges, grapes, cherries
> and pineapple.
>
> As you say, it is a matter of taste.
>
> Linda
>
> -----Original Message-----
> From: [email protected]
> [mailto:[email protected]] On Behalf Of bill
> lam
> Sent: Thursday, August 23, 2012 6:10 AM
> To: [email protected]
> Subject: Re: [Jprogramming] Creating random symmetric matrices
>
> machine translation is [:-:]*>: while that from Shaw is -:@(*>:)
>
> the main difference in this case 13 : tends use [: to form a train of fork
> but human tends to form compound verb using @ That said, certainly some
> prefer [: over @.
>
> IMO 13 : is similar to google translate, it is useful but the result could be
> aweful.
>
> Чтв, 23 Авг 2012, Linda Alvord писал(а):
>> If you compare these two tacit versions for the creation of the
>> matrix, I think my version is optimal because it is "read" from right
>> to left. I don't care much if it or most any function is fast, as it
>> always beats me in completing whatever it is doing.
>>
>> Maybe someone will write an optimizer to turn my code into optimal
>> code and then the computer can speed along in the fast lane without
>> ever explaining it to me.
>>
>> It could do all the final comparisons and choosing of optimal timings.
>> It could do it on its own and just keep the results to itself. It,
>> notice how I have humanized it since it one of my best mathematical
>> buddies, reads from left to right and right to left with equal easy.
>> However, most humans probably don't it makes it difficult for us to
>> communicate and become readers of both styles.
>>
>> So.... how do you judge which of these two versions is optimal?
>>
>> Linda
>>
>>
>> -----Original Message-----ow
>> From: [email protected]
>> [mailto:[email protected]] On Behalf Of Ric
>> Sherlock
>> Sent: Thursday, August 23, 2012 3:18 AM
>> To: [email protected]
>> Subject: Re: [Jprogramming] Creating random symmetric matrices
>>
>> 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
>>
>> ---------------------------------------------------------------------
>> - For information about J forums see
>> http://www.jsoftware.com/forums.htm
>
> --
> regards,
> ====================================================
> GPG key 1024D/4434BAB3 2008-08-24
> gpg --keyserver subkeys.pgp.net --recv-keys 4434BAB3
> ----------------------------------------------------------------------
> 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