Having seen Henry's solution, I see that I have left the job half done, so here 
is the rest of my solution.

    dyadind =. ;@:(= #"1 {@({@i."0 @$@]))
   6 dyadind i. 3 4
1 2

Having produced that, I note that Henry's is twice as fast and takes up half 
the space and the differences become more apparent at higher dimensions.

   1000 timespacex '6 dyadind i. 3 4'
1.807e_6 4288
   1000 timespacex '6 ($@] #: I.@(= ,)) i. 3 4'
8.68e_7 2496
    1000 timespacex '6 dyadind i. 2 3 3 4'
5.283e_6 12992
   1000 timespacex '6 ($@] #: I.@(= ,)) i. 2 3 3 4'
1.05e_6 3008

Cheers, bob   

> On Nov 13, 2020, at 09:25, 'robert therriault' via Programming 
> <[email protected]> wrote:
> 
> Hi Thomas,
> 
> I usually use something like this which relies on Category ({) to group the 
> indices generated by i. applied to each index of the shape. I imagine others 
> have different approaches.
> 
>   i. 3 4
> 0 1  2  3
> 4 5  6  7
> 8 9 10 11
>   ind=.{@({@i."0 @$)
>   ind i. 3 4
> ┌───┬───┬───┬───┐
> │0 0│0 1│0 2│0 3│
> ├───┼───┼───┼───┤
> │1 0│1 1│1 2│1 3│
> ├───┼───┼───┼───┤
> │2 0│2 1│2 2│2 3│
> └───┴───┴───┴───┘
>   i. 2 3 4
> 0  1  2  3
> 4  5  6  7
> 8  9 10 11
> 
> 12 13 14 15
> 16 17 18 19
> 20 21 22 23
>   ind i. 2 3 4
> ┌─────┬─────┬─────┬─────┐
> │0 0 0│0 0 1│0 0 2│0 0 3│
> ├─────┼─────┼─────┼─────┤
> │0 1 0│0 1 1│0 1 2│0 1 3│
> ├─────┼─────┼─────┼─────┤
> │0 2 0│0 2 1│0 2 2│0 2 3│
> └─────┴─────┴─────┴─────┘
> 
> ┌─────┬─────┬─────┬─────┐
> │1 0 0│1 0 1│1 0 2│1 0 3│
> ├─────┼─────┼─────┼─────┤
> │1 1 0│1 1 1│1 1 2│1 1 3│
> ├─────┼─────┼─────┼─────┤
> │1 2 0│1 2 1│1 2 2│1 2 3│
> └─────┴─────┴─────┴─────┘
> 
> Cheers, bob
> 
>> On Nov 13, 2020, at 09:05, thomas.bulka via Programming 
>> <[email protected]> wrote:
>> 
>> Hi everyone,
>> 
>> still learning J, I stumbled across a problem which should be easy to solve, 
>> but somehow I have not been able to do so, yet. Say, I have defined a matrix 
>> M:
>> 
>> M =: 3 4 $ >: i. 12
>> 
>> I now want to get the row and column index of 6 in M, which is 1 2. If M was 
>> a vector, I could easily get the index of 6 with the help of I.:
>> 
>> I. 6 = , M
>> 
>> Applying I. to M in its original shape, however, returns a boolean vector 
>> which indicates in which rows 6 has been found (at least that is my 
>> interpretation).
>> 
>> Is it possible to apply I. to higher rank arrays in order to receive the 
>> complete indices of the elements I'm looking for? Or should I approach that 
>> problem in another way?
>> 
>> Thank you very much in advance for your help!
>> 
>> Kind regards,
>> 
>> Thomas
>> 
>> ----------------------------------------------------------------------
>> 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