Generally speaking, you want to push the large arrays into J's primitives as much as possible. Going the other direction, like you're doing here (using relatively expensive functions at rank 0 on relatively large arrays) is mostly going to bog down.
Thanks, -- Raul On Mon, Oct 2, 2017 at 9:42 AM, Erling Hellenäs <[email protected]> wrote: > Hi all ! > > I tried to create explicit and tacit definitions of our composition > conjunctions. I think the result could possibly be used to clarify the > descriptions in NuVoc. > > Opinions are welcome, there are probably still some bugs or > misunderstandings of function, there could be interesting aspects to > discuss. > > The printout follows, then my project with definitions, tests and some minor > explanations. > > In the end of the printout there are some performance measurements. The > explicit versions are doing bad in those. The built in versions are slightly > faster, which could be expected. > > Cheers, > > Erling > > ====Printout======================= > > ts=: 6!:2 , 7!:2@] NB. Time and space > > At=: 2 : 0 > NB. @: > u v"_ y > : > u x v"_ y > ) > > <At- 1 2 > ┌─────┐ > │_1 _2│ > └─────┘ > NB. < _1_2 > 5 <At- 1 2 > ┌───┐ > │4 3│ > └───┘ > NB. < 4 3 > > NB. @: > AtTacit=: 2 : '[: u v' > > > <AtTacit- 1 2 > ┌─────┐ > │_1 _2│ > └─────┘ > NB. < _1_2 > 5 <AtTacit- 1 2 > ┌───┐ > │4 3│ > └───┘ > NB. < 4 3 > > NB. @: > <AtTacit- > [: < - > > Atop=: 2 : 0 > NB. @ > u At v"v y > : > x u At v"v y > ) > > <Atop- 1 2 > ┌──┬──┐ > │_1│_2│ > └──┴──┘ > NB. _1;_2 > 5 <Atop- 1 2 > ┌─┬─┐ > │4│3│ > └─┴─┘ > NB. 4;3 > > NB. @ > AtopTacit=: 2 : '([: u v)"v' > > <AtopTacit- 1 2 > ┌──┬──┐ > │_1│_2│ > └──┴──┘ > NB. _1;_2 > 5 <AtopTacit- 1 2 > ┌─┬─┐ > │4│3│ > └─┴─┘ > NB. 4;3 > > NB. @ > <AtopTacit- > ([: < -)"0 0 0 > <AtopTacit[ > ([: < [)"_ _ _ > <AtopTacit i. > ([: < i.)"1 _ _ > > Appose=: 2 : 0 > NB. &: > u v"_ y > : > (v"_ x) u v"_ y > ) > > <Appose- 1 2 > ┌─────┐ > │_1 _2│ > └─────┘ > NB. < _1 _2 > 5 ([:<<)Appose- 4 5 > ┌───┐ > │1 0│ > └───┘ > NB. < 1 0 > > NB. &: > ApposeTacitMonadic=: 2 : '[: u [: v ]' > ApposeTacitDyadic=: 2 : '([: v [) u [: v ]' > > <ApposeTacitMonadic- 1 2 > ┌─────┐ > │_1 _2│ > └─────┘ > NB. < _1 _2 > 5 ([:<<)ApposeTacitDyadic- 4 5 > ┌───┐ > │1 0│ > └───┘ > NB. < 1 0 > > NB. &: > <ApposeTacitMonadic- > [: < [: - ] > ([:<<)ApposeTacitDyadic- > ([: - [) ([: < <) [: - ] > > Compose=: 2 : 0 > NB. & > u Appose v"v y > : > x u Appose v"v y > ) > > <Compose- 1 2 > ┌──┬──┐ > │_1│_2│ > └──┴──┘ > NB. _1;_2 > 5 ([:<<)Compose- 4 5 > ┌─┬─┐ > │1│0│ > └─┴─┘ > NB. 1;0 > > NB. & > ComposeTacitMonadic=: 2 : '([: u [: v ])"v' > ComposeTacitDyadic=: 2 : '(([: v [) u [: v ])"v' > > <ComposeTacitMonadic- 1 2 > ┌──┬──┐ > │_1│_2│ > └──┴──┘ > NB. _1;_2 > 5 ([:<<)ComposeTacitDyadic- 4 5 > ┌─┬─┐ > │1│0│ > └─┴─┘ > NB. 1;0 > > NB. & > <ComposeTacitMonadic- > ([: < [: - ])"0 0 0 > ([:<<)ComposeTacitDyadic- > (([: - [) ([: < <) [: - ])"0 0 0 > > UnderRankInfinite=: 2 : 0 > NB. &.: > v"_^:_1 u v"_ y > : > v"_^:_1 (v"_ x) u v"_ y > ) > > -UnderRankInfinite> 1 2;3 4 > ┌─────┐ > │_1 _2│ > │_3 _4│ > └─────┘ > NB. <2 2 $ _1 _2 -3 -4 > (5;6) -UnderRankInfinite> 1 2;3 4 > ┌───┐ > │4 3│ > │3 2│ > └───┘ > NB. < 2 2 $ 4 3 3 2 > > NB. &.: > UnderRankInfiniteTacitMonadic=: 2 : '[: v^:_1 [: u [: v ]' > UnderRankInfiniteTacitDyadic=: 2 : '[: v^:_1 ([: v [) u [: v ]' > > -UnderRankInfiniteTacitMonadic> 1 2;3 4 > ┌─────┐ > │_1 _2│ > │_3 _4│ > └─────┘ > NB. <2 2 $ _1 _2 -3 -4 > (5;6) -UnderRankInfiniteTacitDyadic> 1 2;3 4 > ┌───┐ > │4 3│ > │3 2│ > └───┘ > NB. < 2 2 $ 4 3 3 2 > > NB. &.: > -UnderRankInfiniteTacitMonadic> > [: >^:_1 [: - [: > ] > -UnderRankInfiniteTacitDyadic> > [: >^:_1 ([: > [) - [: > ] > > UnderRankV=: 2 : 0 > NB. &. > u UnderRankInfinite v"v y > : > x u UnderRankInfinite v"v y > ) > > -UnderRankV> 1 2; 3 4 > ┌─────┬─────┐ > │_1 _2│_3 _4│ > └─────┴─────┘ > NB. _1 _2; _3 _4 > (5;6) -UnderRankV> 1 2;3 4 > ┌───┬───┐ > │4 3│3 2│ > └───┴───┘ > NB. 4 3;3 2 > > NB. &. > UnderRankVTacitMonadic=: 2 : '([: v^:_1 [: u [: v ])"v' > UnderRankVTacitDyadic=: 2 : '([: v^:_1 ([: v [) u [: v ])"v' > > -UnderRankVTacitMonadic> 1 2; 3 4 > ┌─────┬─────┐ > │_1 _2│_3 _4│ > └─────┴─────┘ > NB. _1 _2; _3 _4 > (5;6) -UnderRankVTacitDyadic> 1 2;3 4 > ┌───┬───┐ > │4 3│3 2│ > └───┴───┘ > NB. 4 3;3 2 > > NB. &. > -UnderRankVTacitMonadic> > ([: >^:_1 [: - [: > ])"0 0 0 > -UnderRankVTacitDyadic> > ([: >^:_1 ([: > [) - [: > ])"0 0 0 > > n=.500000 > v=.?~n > $v > 500000 > 10{.v > 415593 299586 376558 161399 308885 477430 286004 354448 123594 75795 > > ts'-AtTacit-AtTacit-AtTacit-AtTacit-@- v' > 0.240852 1.32199e8 > ts'-AtTacit-AtTacit-AtTacit-AtTacit-AtopTacit- v' > 0.2369 1.322e8 > ts'-At-At-At-At-Atop- v' > 2.96161 1.32204e8 > ts'-@:-@:-@:-@:-@- v' > 0.158078 1.32197e8 > > ====================== Project ======================================= > > ts=: 6!:2 , 7!:2@] NB. Time and space > > At=: 2 : 0 > NB. @: > u v"_ y > : > u x v"_ y > ) > > <At- 1 2 > NB. < _1_2 > 5 <At- 1 2 > NB. < 4 3 > > NB. @: > AtTacit=: 2 : '[: u v' > > > <AtTacit- 1 2 > NB. < _1_2 > 5 <AtTacit- 1 2 > NB. < 4 3 > > NB. @: > <AtTacit- > > Atop=: 2 : 0 > NB. @ > u At v"v y > : > x u At v"v y > ) > > <Atop- 1 2 > NB. _1;_2 > 5 <Atop- 1 2 > NB. 4;3 > > NB. @ > AtopTacit=: 2 : '([: u v)"v' > > <AtopTacit- 1 2 > NB. _1;_2 > 5 <AtopTacit- 1 2 > NB. 4;3 > > NB. @ > <AtopTacit- > <AtopTacit[ > <AtopTacit i. > > Appose=: 2 : 0 > NB. &: > u v"_ y > : > (v"_ x) u v"_ y > ) > > <Appose- 1 2 > NB. < _1 _2 > 5 ([:<<)Appose- 4 5 > NB. < 1 0 > > NB. &: > ApposeTacitMonadic=: 2 : '[: u [: v ]' > ApposeTacitDyadic=: 2 : '([: v [) u [: v ]' > > <ApposeTacitMonadic- 1 2 > NB. < _1 _2 > 5 ([:<<)ApposeTacitDyadic- 4 5 > NB. < 1 0 > > NB. &: > <ApposeTacitMonadic- > ([:<<)ApposeTacitDyadic- > > Compose=: 2 : 0 > NB. & > u Appose v"v y > : > x u Appose v"v y > ) > > <Compose- 1 2 > NB. _1;_2 > 5 ([:<<)Compose- 4 5 > NB. 1;0 > > NB. & > ComposeTacitMonadic=: 2 : '([: u [: v ])"v' > ComposeTacitDyadic=: 2 : '(([: v [) u [: v ])"v' > > <ComposeTacitMonadic- 1 2 > NB. _1;_2 > 5 ([:<<)ComposeTacitDyadic- 4 5 > NB. 1;0 > > NB. & > <ComposeTacitMonadic- > ([:<<)ComposeTacitDyadic- > > UnderRankInfinite=: 2 : 0 > NB. &.: > v"_^:_1 u v"_ y > : > v"_^:_1 (v"_ x) u v"_ y > ) > > -UnderRankInfinite> 1 2;3 4 > NB. <2 2 $ _1 _2 -3 -4 > (5;6) -UnderRankInfinite> 1 2;3 4 > NB. < 2 2 $ 4 3 3 2 > > NB. &.: > UnderRankInfiniteTacitMonadic=: 2 : '[: v^:_1 [: u [: v ]' > UnderRankInfiniteTacitDyadic=: 2 : '[: v^:_1 ([: v [) u [: v ]' > > -UnderRankInfiniteTacitMonadic> 1 2;3 4 > NB. <2 2 $ _1 _2 -3 -4 > (5;6) -UnderRankInfiniteTacitDyadic> 1 2;3 4 > NB. < 2 2 $ 4 3 3 2 > > NB. &.: > -UnderRankInfiniteTacitMonadic> > -UnderRankInfiniteTacitDyadic> > > UnderRankV=: 2 : 0 > NB. &. > u UnderRankInfinite v"v y > : > x u UnderRankInfinite v"v y > ) > > -UnderRankV> 1 2; 3 4 > NB. _1 _2; _3 _4 > (5;6) -UnderRankV> 1 2;3 4 > NB. 4 3;3 2 > > NB. &. > UnderRankVTacitMonadic=: 2 : '([: v^:_1 [: u [: v ])"v' > UnderRankVTacitDyadic=: 2 : '([: v^:_1 ([: v [) u [: v ])"v' > > -UnderRankVTacitMonadic> 1 2; 3 4 > NB. _1 _2; _3 _4 > (5;6) -UnderRankVTacitDyadic> 1 2;3 4 > NB. 4 3;3 2 > > NB. &. > -UnderRankVTacitMonadic> > -UnderRankVTacitDyadic> > > n=.500000 > v=.?~n > $v > 10{.v > > ts'-AtTacit-AtTacit-AtTacit-AtTacit-@- v' > ts'-AtTacit-AtTacit-AtTacit-AtTacit-AtopTacit- v' > ts'-At-At-At-At-Atop- v' > ts'-@:-@:-@:-@:-@- v' > > ---------------------------------------------------------------------- > For information about J forums see http://www.jsoftware.com/forums.htm ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm
