table =: 5 4 $ i. 20

   positions =: 0 2 0 1 2

   (0 0;1 2;2 0;3 1;4 2){table
0 6 8 13 18

   (i.5),&.> positions
┌───┬───┬───┬───┬───┐
│0 0│1 2│2 0│3 1│4 2│
└───┴───┴───┴───┴───┘

   ((i.5),&.> positions){table
0 6 8 13 18

2010/5/22 Roman Odaisky <[email protected]>:
> Hi,
>
> I’ve only recently gotten into J. It’s very interesting but I’m often unable
> to find simple solutions to simple problems. I’m now struggling with finding a
> way of taking a table and a vector and picking elements from the table with
> positions in rows according to the vector, that is, the i-th element of the
> vector specifies the element to be taken from the i-th row of the table. How
> can this be done?
>
> For example, given table =: 5 4 $ i. 20 and positions =: 0 2 0 1 2, the result
> should be 0 6 8 13 8:
>
> <0> 1  2  3
>  4  5 <6> 7
> <8> 9 10 11
> 12<13>14 15
> 16 17<18>19
>
> The best I was able to come up with is
>
>   pick =: {~ (<"1 @: ,.~ i.@:#)
>   table pick positions
> 0 6 8 13 18
>
> which is rather ugly. I expected this to look more like “positions {"something
> table” but nothing of that kind worked.
>
> In Python that would look like this:
>
> def pick(table, positions):
>   return [row[p] for row, p in zip(table, positions)]
>
> or in a J-ish point-free way:
>
> pick = compose(partial(starmap, getitem), zip)
>
> It looks like no more than five verbs should be necessary. How can J do this?
>
> --
> TIA
> Roman.
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm



-- 
Björn Helgason, Verkfræðingur
Fornustekkum II
781 Hornafirði,
t-póst: [email protected]
gsm: +3546985532
sími: +3544781286
http://groups.google.com/group/J-Programming


Tæknikunnátta höndlar hið flókna, sköpunargáfa er meistari einfaldleikans

góður kennari getur stigið á tær án þess að glansinn fari af skónum
          /|_      .-----------------------------------.
         ,'  .\  /  | Með léttri lund verður        |
     ,--'    _,'   | Dagurinn í dag                     |
    /       /       | Enn betri en gærdagurinn  |
   (   -.  |        `-----------------------------------'
   |     ) |         (\_ _/)
  (`-.  '--.)       (='.'=)   ♖♘♗♕♔♙
   `. )----'        (")_(") ☃☠
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to