Also, for all those tricky sentences such as,

   ( X=. 2 3 0 ) 'x ({. x)} y'(13 :)  ( Y=. i. 3 3 )
0 1 2
3 4 5
2 3 0

   'x ({. x)} y'(13 :)
4 : 'x ({. x)} y'

There is always an underground (no tears for the brave) alternative:
construct the atomized version (so to speak) of the previously problematic
type of sentence,

   an=. <@:((":0) ,&< ])                         NB. Atomizing a noun (or a
word)
   as=. ([ ; < @: ((<'{.') ; [) ; (<'}'); ])&:an NB. Atomizing x ({. x)} y

   X as Y
+--------------------------------------------+
¦+---------+¦+----------------+¦+-+¦+-------+¦
¦¦+-------+¦¦¦+--------------+¦¦¦}¦¦¦0¦0 1 2¦¦
¦¦¦0¦2 3 0¦¦¦¦¦+--+¦+-------+¦¦¦+-+¦¦ ¦3 4 5¦¦
¦¦+-------+¦¦¦¦¦{.¦¦¦0¦2 3 0¦¦¦¦   ¦¦ ¦6 7 8¦¦
¦+---------+¦¦¦+--+¦+-------+¦¦¦   ¦+-------+¦
¦           ¦¦+--------------+¦¦   ¦         ¦
¦           ¦+----------------+¦   ¦         ¦
+--------------------------------------------+

and evaluate it,

   Cloak=. (0:`)(,^:)
   train=. (<'`:')Cloak &6                       NB. Verbalizing `:6

   X train @: as f. Y                            NB. Evaluating the
atomized sentence
0 1 2
3 4 5
2 3 0

   train @: as f.
,^:(0:``:)&6@:(([ ; <@:((<'{.') ; [) ; (<'}') ; ])&:(<@:((,'0') ,&< ])))




On Mon, Jan 13, 2014 at 12:52 AM, Raul Miller <rauldmil...@gmail.com> wrote:

>    FF=: [`({.@[)`]}
>
> Or something using multiple and add with some bit valued intermediate
> results.
>
> Thanks,
>
> --
> Raul
>
> On Mon, Jan 13, 2014 at 12:39 AM, km <k...@math.uh.edu> wrote:
> > Here is a simpler question.  Is there a tacit version of ff below?
> >
> >    u =: 2 3 0
> >    v =: i. 3 3
> >    ff =: 4 : 'x ({. x)} y'
> >    u ff v
> > 0 1 2
> > 3 4 5
> > 2 3 0
> >
> > --Kip Murray
> >
> > Sent from my iPad
> >
> >> On Jan 12, 2014, at 10:41 PM, Raul Miller <rauldmil...@gmail.com>
> wrote:
> >>
> >> Sometimes it helps to inspect intermediate results. With recursion,
> >> though, it can be a bit tricky for a casual observer to see the
> >> intermediate results. With that in mind, here's what I am seeing for
> >> your example:
> >>
> >> a1=: (calcU calcL) saveAA
> >> a2=: (calcU calcL) a1
> >> a3=: (calcU calcL) a2
> >>
> >> A4=: ((({.@[ ,: ]) ,&.:(|."1) a3"_) calcL) a2
> >> A5=: ((({.@[ ,: ]) ,&.:(|."1) A4"_) calcL) a1
> >> A6=: ((({.@[ ,: ]) ,&.:(|."1) A5"_) calcL) saveAA
> >>
> >> a1, a2 and a3  are progressively smaller square matrices (2x2, 1x1, 0x0)
> >>
> >> A4, A5 and A6 are progressively larger matrices which are twice as
> >> tall as wide. If you could compute them in reverse order it might have
> >> made sense to make it twice as wide as tall (with intermediate lu side
> >> by side instead of interleave stacked)?
> >>
> >> A6 is the same as lumain saveAA
> >>
> >> I should go back and re-read km's implementation. But I will note that
> >> you can cut code size slightly using some cross hooks:
> >>
> >>   lumain =: (((,:~ {.)~ ,&.:(|."1) $:@calcU) calcL)^:(*@#)
> >>   lu =: [: (,:~ |:)/  1 0 2 |:  _2 ]\ lumain
> >>
> >> Anyways, I think your O(n^3) space is largely because all intermediate
> >> values from what I have characterized as a (calcU calcL) hook are
> >> "pre"-computed and placed on the stack before proceeding with further
> >> computations.
> >>
> >> Thanks,
> >>
> >> --
> >> Raul
> >>
> >>> On Sun, Jan 12, 2014 at 10:10 PM, Henry Rich <henryhr...@nc.rr.com>
> wrote:
> >>>   calcL =: (% {.)@:({."1)
> >>>   calcU =: (}.@[ - {.@[ *"1 0 ])&:(}."1)
> >>>   lumain =: ((({.@[ ,: ]) ,&.:(|."1) $:@calcU) calcL)^:(*@#)
> >>>   lu =: [: (|:@] ,: [)/  1 0 2 |:  _2 ]\ lumain
> >>> NB. Half this code is handling joining ragged lists.
> >>> NB. Is there a better way?
> >>>
> >>>   saveAA =: 3 3 $ 2 1 4 _4 _1 _11 2 4 _2
> >>>   lu saveAA
> >>>
> >>> 1 0  0
> >>> _2 1  0
> >>> 1 3  1
> >>>
> >>> 2 1  4
> >>> 0 1 _3
> >>> 0 0  3
> >>>
> >>> I suspect that a vectorized explicit version is a better way to go.
> This
> >>> version has memory requirements of O(n^3).
> >>>
> >>> Henry Rich
> >>>
> >>>
> >>>> On 1/12/2014 9:00 PM, km wrote:
> >>>>
> >>>> Verb LU below produces the matrices L and U of the LU decomposition
> of a
> >>>> square matrix A.  L is lower triangular, U is upper triangular, and A
> is L
> >>>> +/ . * U .
> >>>>
> >>>> Should one attempt a tacit version?
> >>>>
> >>>> eye =: =@i.@]  NB. eye 3 is a 3 by 3 identity matrix
> >>>>
> >>>> rop =: 3 : 0  NB. row op: subtract c times row i0 from row i1
> >>>> :
> >>>> 'i1 c i0' =. x
> >>>> ( (i1 { y) - c * i0 { y ) i1 } y
> >>>> )
> >>>>
> >>>> LU =: 3 : 0  NB. square matrices L and U for y -: L +/ . * U
> >>>>   m =. # y
> >>>>   L =. eye(m)
> >>>>   U =. y
> >>>> for_j. i. <: m do.
> >>>>   p =. (< j , j) { U
> >>>>   for_i. j + >: i. <: m - j do.
> >>>>      c =. p %~ (< i , j) { U
> >>>>      L =. c (< i , j) } L
> >>>>      U =. (i, c, j) rop U
> >>>>   end.
> >>>> end.
> >>>>   L ,: U
> >>>> )
> >>>>
> >>>>    saveAA
> >>>>  2  1   4
> >>>> _4 _1 _11
> >>>>  2  4  _2
> >>>>
> >>>>    LU saveAA
> >>>>  1 0  0
> >>>> _2 1  0
> >>>>  1 3  1
> >>>>
> >>>>  2 1  4
> >>>>  0 1 _3
> >>>>  0 0  3
> >>>>
> >>>>    saveAA -: +/ . */ LU saveAA
> >>>> 1
> >>>>
> >>>> --Kip Murray
> >>>>
> >>>> Sent from my iPad
> >>>> ----------------------------------------------------------------------
> >>>> 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

Reply via email to