There are different ways of thinking about multi-dimensional indices.
Probably the most robust is the mechanism which is embedded in J's
representation of its own data: An array is represented by a shape and the
ravel of its data. Also the polynomial-like functions #. and #: are
designed for working with "shapely" information.

Here's a small example:
   ($ #: I.@,)1 p: i.4 4 4
0 0 2
0 0 3
0 1 1
0 1 3
0 2 3
0 3 1
1 0 1
1 0 3
1 1 3
1 3 1
1 3 3
2 1 1
2 2 1
2 2 3
2 3 3
3 1 1
3 2 3
3 3 1

That said, sometimes it's better to work with I.@, directly, and sometimes
you want those indices boxed. It really depends on what you are trying to
do.

Thanks,

-- 
Raul



On Sat, May 31, 2014 at 9:57 AM, Jon Hough <[email protected]> wrote:

> Probably a very simple question. For a single dimension array I can do
> I.  1 0 1 1 1 0 0 0 1 0 1
> 0 2 3 4 8 10
> to  get the nonzero indices.
> But I am not sure how to do this for a larger dimension. i.e. get the
> (i,j) or (i,j,k) index of nonzero elements.
> e.g. for this matrix:
>  arr =. 3 3 $ 1 0 0 0 1 0 0 0 1
> I. doesn't work because it only gives me the ith value of the position of
> the nonzero elements.
> Any help appreciated.
> Regards.
> ----------------------------------------------------------------------
> 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