My first attempt at implementing like that ran into a problem with
mix-matched types in r for some cases, so I reworked the thing to
support arguments of any type:
comb=: 4 : 0
k=. i.>:d=.y-x
z=. (d$<i.0 0),<i.1 0
for. i.x do. z=. k ,.&.> ,&.>/\. >:&.> z end.
; z
)
peermm=:3 :0
arg=. (/: #@>)</.~i.~y
n1=. 0 i.~1=#@> arg
m=. (i.@! A. i.)n1
for_d.n1}.arg do.
u=.{.s=.>d
n=.i.(#s)+{:$m
e=.n e."1 s comb&#n
m=.,/(u*e)+"1/"_1 (1-e)#inv"1/m
end.
m{y
)
I have no idea if this is actually faster. I'll let someone else worry
about that.
--
Raul
On Sat, Apr 25, 2015 at 12:58 PM, Roger Hui <[email protected]> wrote:
> The peermm function can be made faster by doing the actual permutations of
> those cells of </.~y having only a single element.
>
>
> On Fri, Apr 24, 2015 at 10:46 PM, Raul Miller <[email protected]> wrote:
>
>> On Fri, Apr 24, 2015 at 7:03 PM, Roger Hui <[email protected]>
>> wrote:
>> > The details of implementing this algorithm are left as an exercise for
>> the
>> > reader. :-)
>>
>> Do I qualify as a reader?
>>
>> comb=: 4 : 0
>> k=. i.>:d=.y-x
>> z=. (d$<i.0 0),<i.1 0
>> for. i.x do. z=. k ,.&.> ,&.>/\. >:&.> z end.
>> ; z
>> )
>>
>> peermm=:3 :0
>> r=.i.1 0
>> for_d.</.~y do.
>> u=.{.s=.>d
>> n=.i.(#s)+{:$r
>> e=.n e."1 s comb&#n
>> r=.,/(u*e)+"1/"_1 (1-e)#inv"1/r
>> end.
>> )
>>
>> peermm 1 1 2 2
>> 2 2 1 1
>> 2 1 2 1
>> 2 1 1 2
>> 1 2 2 1
>> 1 2 1 2
>> 1 1 2 2
>>
>> --
>> Raul
>> ----------------------------------------------------------------------
>> 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