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