Did you notice my last line ? It specifically gave you an alternative way to unbox the cells you had in IsMax preserving row/column indexes.
Unfortunately it became “line broken” in email, but you can stitch and try … sending again (with spaces if that avoids the line breaking)… Treat the following line of chars (even if multiple lines) as one line (you may also have to change the “ to the J form (just retype this character after you copy/paste the line) … this works likewise for the 3x3 cells…/Rob > ,”1 &. > / , &. > / IsMax > On 29 Mar 2017, at 8:38 pm, 'Jon Hough' via Programming > <[email protected]> wrote: > > Yes, the "stride" of each window is equal to its length, so in this case > using ;.3 (with appropriate arguments) gives the same result as ;.1 . > Regardless, my problem occurs after this part, I think. The problem is trying > to unbox the boxed array, keeping the correct shape and element positions. > If there is a way to do this without using ;. that would also be great. > > Just to reiterate, given an NxN array, T say, create a second NxN array, S > say, such that the elements of S are either 1 or 0, depending on whether they > are equal to the appropriate MxM subarray's max element, where M divides N. > Sorry, that is a pretty ugly definition of the problem. > > Here's another example (using ;.3): > > ]T =: 6 6 $ 1 4 100 0 4 3 8 5 200 > 1 4 100 0 4 3 > 8 5 200 1 4 100 > 0 4 3 8 5 200 > 1 4 100 0 4 3 > 8 5 200 1 4 100 > 0 4 3 8 5 200 > > c =: ;.3 > (2 2 $ 3 3 3 3) ((>./ = ])&.>@:<)c T NB. window has size 3x3 and stride > 3x3, so creates 4 3x3 boxes > > > ┌─────┬─────┐ > │0 0 0│0 0 0│ > │0 1 0│0 0 0│ > │0 0 0│0 0 1│ > ├─────┼─────┤ > │0 0 0│0 0 0│ > │0 1 0│0 0 0│ > │0 0 0│0 0 1│ > └─────┴─────┘ > > So, the problem is to get rid of the boxes, but keep the shape and positions > of the array and its elements. > > -------------------------------------------- > On Wed, 3/29/17, Rob Hodgkinson <[email protected]> wrote: > > Subject: Re: [Jprogramming] Unboxing after subarray function > To: [email protected] > Date: Wednesday, March 29, 2017, 6:19 PM > > Jon, I note Henry’s > point about using <;.3 T if you wish to use the 2x2 > tessellation windows as per Henry’s suggestion, that is > fine. (it was my first approach on reading your question > too). > > But I notice you are > choosing to “slice” separate subarrays (non overlapping) > so I gather your question is a neater way to reconstruct > IsMax as a simple 10 10 array ? If so, you gave this: > 10 10 $ , > |:"2 <"1 >> IsMax > > Then my > suggestion is this (which reproduces your final line > only): > >,"1&.>/ > ,&.>/ IsMax > > HTH, > Regards Rob > > >> On 29 Mar 2017, at 6:54 pm, 'Jon > Hough' via Programming <[email protected]> > wrote: >> >> I should > also mention that my verb(s) work for subarrays other than > 2x2. >> e.g. if T is a 12x12 array >> T =: 12 12 $ 0 _2 12 100 2 4.5 1 7 _5.5 > 3.2 120 2 _100 3 5 18 4 >> is =: 12 $ 1 > 0 0 >> IsMax =: > (is;is) ($$((>./=])@:,))&.>@:< > interval T NB. max of 3x3 subarrays >> > 12 12 $ , > |:"2 <"1 > IsMax >> >> Also creates the > correct array. >> >> > -------------------------------------------- >> On Wed, 3/29/17, 'Jon Hough' via > Programming <[email protected]> > wrote: >> >> Subject: > [Jprogramming] Unboxing after subarray function >> To: "Programming Forum" <[email protected]> >> Date: Wednesday, March 29, 2017, 4:38 > PM >> >> I have a NxN > matrix. >> For each 2x2 subarray of this > (keep it simple, N is even), I >> want to > calculate the maximum value and if the value of that >> cell equals the maximum of the 2x2 > subarray write 1, else >> write 0. >> >> e.g. >> NB. T arbitrary 10x10 matrix >> T =: 10 10 $ 0 _2 12 100 2 4.5 1 7 _5.5 > 3.2 120 2 _100 3 5 >> 18 4 >> >> interval =: ;.1 >> is =: 10 $ 1 0 >> >> IsMax =: >> > (is;is) ($$((>./=])@:,))&.>@:< >> interval T >> >> So IsMax shows which elements are the max > values of the 4x4 >> subarrays. >> >> Now I want to unbox > and keep the indices correct. >> >> This appears to work >> > >> 10 10 $ , > |:"2 <"1 >> IsMax >> >> But is > incredibly messy. I'm hoping there is a nicer/ more >> terse / elegant way to do this. >> >> Thanks, >> Jon >> > ---------------------------------------------------------------------- >> 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
