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

Reply via email to