You might also want to look at the sparse utilities. $. map
1 2 | 1 1 5 | 1 4 1 | 1 https://www.jsoftware.com/help/dictionary/d211.htm 1 5 | 1 4 1 | 1 On Sun, Jun 7, 2020 at 2:08 PM Henry Rich <[email protected]> wrote: > Devon has shown how to do the scatter-read you asked for. If you want > full rows or columns, use other forms. In your case, where you have a > table (x) where each row is an index list, use > > x (<"1@[ { ]) array > > to avoid creating the individual boxed index-lists. You can assign > (<"1@[ { ]) to a name. > > Henry Rich > > On 6/7/2020 12:48 PM, Devon McCormick wrote: > > I. ,map > > 8 11 25 > > ]ixs=. ($map) #: I. ,map > > 1 2 > > 1 5 > > 4 1 > > map{~<"1 ixs > > 1 1 1 > > > > The same expression works for higher-dimensional arrays as well. > > > > > > On Sun, Jun 7, 2020 at 12:41 PM <xash@λ.land> wrote: > > > >> Hello everyone, > >> > >> I'm new to J and while working with 1d indices feels quite natural, > using > >> multidimensional indices not so. For example, finding the indices > >> (3 2$1 2,1 5,4 1) of #'s in this bit mask^Wmap: > >> > >> map=:'#'= [;._2 (0 : 0) > >> ...... > >> ..#..# > >> ...... > >> ...... > >> .#.... > >> ...... > >> ) > >> > >> With 1d indices it would be `linear=:I.;map`. But to get the 2d indices > the > >> result of I. needs to be intertwined with row numbers as I. only > >> operates on lists: > >> points=:; (i.#map) ,"0/each <&I. map > >> – and this won't even generalize to more dimensions. > >> > >> To reverse this and built back a bit map, instead of `1 linear}($map)$0` > >> I'd use > >> 1 (<"1 points)}($map)$0 > >> though this is wrong if points='', as then with `1 (<'')}…` the whole > >> map is set to 1. So it's actually > >> 1 (<"1^:(*@#) points)} ($map)$0 > >> > >> With the 2d version of `linear{map` it's even more complicated, as > `''{map` > >> returns not nothing but an empty axis with shape 0 6, so output needs > to be > >> checked, too. > >> > >> Before I built up too many inefficient helper functions: what is the > usual > >> approach to this? I could drop to 1d indices and convert when needed > >> (what is the manhattan distance between 12 and 16?), but for this I then > >> need > >> the dimensions of map all over the place to get back x/y coordinates and > >> this doesn't feel right either. > >> > >> Thanks! > >> ---------------------------------------------------------------------- > >> For information about J forums see http://www.jsoftware.com/forums.htm > >> > > > > > -- > This email has been checked for viruses by AVG. > https://www.avg.com > > ---------------------------------------------------------------------- > For information about J forums see http://www.jsoftware.com/forums.htm > ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm
