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

Reply via email to