Roger, The llr versions you provided are interesting and useful. I expect to learn much by analysing them.
Skip Cave On Sun, May 17, 2020 at 3:09 PM Roger Hui <[email protected]> wrote: > (I posted the following msg which appears not to be distributed. Not yet > in the archive, at least. Sorry if you receive this more than once.) > > llr0=: {.@(/:~)@(i.@# |."0 1 ])"1 > > llr1=: {.@(/:~)@(([: I. ] = <./)|."0 1 ])"1 > > llr2=: 3 : 0 > c=. {: $ y > n=. # y > (c*i.n) { }."1 /:~ (c#i.n) ,. ((n*c)$i.c) |."_1 c # y > ) > > llr3=: 3 : 0 > c=. {: $ y NB. # columns > n=. # y NB. # rows > r=. >:+:>./|,y NB. the "radius" > q=. y + r*i.n NB. increase each row by the radius > e=. <./"1 q NB. minimum in each row > b=. q=e NB. where elements equal the minimum > s=. +/"1 b NB. # times that happens for each row > (r*i.n) -~ (}:+/\0,s) { /:~ (c|I.,b) |."_1 s#q > ) > > llr0 computes the lexicographically least rotation of all the rotations of > each row. > > llr1 computes the LLR of, each row rotated so that every minimal element > gets the chance to be the first element. > > llr2 is llr0 reworked so that the code works on the entire matrix at once, > rather than one row at a time. > > llr3 likewise, llr2 reworked to work on the entire matrix at once. It > assumes that the maximal element in the entire matrix (needed for the > "radius") is no so large as to consume all available precision. > > odo=: #: i.@(*/) > x=: ,.~ ,~ odo 5$5 > $x > 6250 10 > > (llr0 -: llr1) x > 1 > (llr0 -: llr2) x > 1 > (llr0 -: llr3) x > 1 > > timer=: 6!:2 > timer&> 'llr0 x'; 'llr1 x'; 'llr2 x'; 'llr3 x' > 0.0434449 0.0141476 0.0207071 0.00634583 > > > On Sat, May 16, 2020 at 4:44 PM Skip Cave <[email protected]> wrote: > > > I have run across this issue a few times in the past. > > The following 8x4 array has several rows that are 'rotational > duplicates'. > > > > ]n=.8 4$2 4 1 3 2 3 4 1 3 4 1 2 3 2 4 1 1 3 2 4 4 1 2 3 1 2 3 4 4 1 3 2 > > > > 2 4 1 3 > > > > 2 3 4 1 > > > > 3 4 1 2 > > > > 3 2 4 1 > > > > 1 3 2 4 > > > > 4 1 2 3 > > > > 1 2 3 4 > > > > 4 1 3 2 > > > > > > Is it possible to develop a verb that would find the rows that are > > rotational duplicates of each other. That is, find all the rows that > would > > be the same, if each row was rotated some integer value in the first > > dimension. The output of the verb would be the same shape array, but with > > each duplicate row rotated such that they show as identical. Picking the > > 'standard' rotation for a set of rotational duplicates is up to the > > implementer. > > > > > > Skip > > ---------------------------------------------------------------------- > > 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
