An alternative phrase would be "taking the diagonal".

The "run together" mechanism relates to the distinction between inner
and outer product. If you think of each array having an associated
list of indices along each dimension, normally transpose uses an outer
product combination of these. But when they are "run together" we do
not combine them with outer product.  Something like this:

transpose=: 4 :0
  dims=. x,~&(<"0^:(1-L.)) (;x) -.~ i. 1 + >./; x
  inds=. dims {L:0 1 (*/\.1 |.!.1 $y) (* i.)&.> $ y
  runt=. +&.>/S:1 inds {.~L:0 <./&.> #&>&.> inds
  (+/&> {runt) {,y
)

The value I labeled 'runt' represents the run-together indices.  And
while the above code represents the transpose operation, the real
value involves inspecting the intermediate values.  Perhaps something
like this:

transpo=: 4 :0
  smoutput 'dims'; dims=. x,~&(<"0^:(1-L.)) (;x) -.~ i. 1 + >./; x
  smoutput 'inds'; inds=. dims {L:0 1 (*/\.1 |.!.1 $y) (* i.)&.> $ y
  smoutput 'runt'; runt=. +&.>/S:1 inds {.~L:0 <./@:(#&>)&.> inds
  NB. (+/&> {runt) {,y
)

I hope this helps,

-- 
Raul

On Fri, Dec 7, 2012 at 6:04 PM, Dan Bron <j...@bron.us> wrote:
> Something I never wrapped my head around with |: is what exactly the DoJ 
> means when it says axes are "run together" when the LHA is boxed.
>
> -Dan
>
>
> On Dec 7, 2012, at 3:28 PM, Marshall Lochbaum <mwlochb...@gmail.com> wrote:
>
>> 0 1 2&|: will do the job.
>>
>> I recommend reading the dictionary definition of |: through a few times.
>> In particular, note that 0 1&|: on a rank three array is the same as
>> 2 0 1&|: , and 0 1 2&|: turns into 3 0 1 2&|: on a rank four array.
>>
>> Marshall
>>
>> On Fri, Dec 07, 2012 at 03:02:49PM -0500, Brian Schott wrote:
>>> I am working with photographic images which use RGB color.
>>> The array d is a single image and the array D is now 2 images but I
>>> want D to contain any number of images. And I want split out the
>>> R,G, and B part which I can do for d, but I am having difficulty
>>> with the analogous r, g, and b for D.
>>>
>>>   $d
>>> 50 50 3
>>>   $D
>>> 2 50 50 3
>>>
>>>   'R G B'=: 0 1|: d
>>>   $G
>>> 50 50
>>>
>>> What is the mysteryverb that will produce ($g)-:2 50 50 in the
>>> following expression?
>>>   'r g b'=: mysteryverb D
>>>
>>> Thanks,
>>>
>>> (B=)
>>> ----------------------------------------------------------------------
>>> 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