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

Reply via email to