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
