KX Community

Find answers, ask questions, and connect with our KX Community around the world.
KX Community Guidelines

Home Forums kdb+ Apply a list of parameters to a list of input

  • Apply a list of parameters to a list of input

    Posted by powerpeanuts on June 7, 2023 at 12:00 am

    Hi, I have a simple question:

    I have a list b:(1 5 6;9 10 76; 43 12 11) and I would like to take the nth indexed element from each list where n is a list, for example n = (0;2;1).

    So the output should be (1;76;12).

     

    What is the easiest syntax to do it? Thanks.

     

    powerpeanuts replied 9 months, 2 weeks ago 4 Members · 4 Replies
  • 4 Replies
  • rocuinneagain

    Member
    June 7, 2023 at 12:00 am

    q)b@'(0;2;1)

    1 76 12

  • eohara_kdb

    Member
    June 7, 2023 at 12:00 am

    Here’s one option:

     

     

    q)b:(1 5 6;9 10 76; 43 12 11)

    q)n:(0;2;1)

    q){x y}'[b;n]

    1 76 12

     

     

     

  • eohara_kdb

    Member
    June 7, 2023 at 12:00 am

    As far as I know it’s not possible without some kind of each, so here’s the same approach for a table:

    q)tab:([time:10:03:54.347 10:04:05.827]price:(20.83 21.44 26.83 29.83e;88.88 88.75 83.27 823.77f);n:0 1) 
    q)update m:{x y}'[price;n] from tab 
    time        | price n m 
    ------------| --------------------------------- 
    10:03:54.347| 20.83 21.44 26.83 29.83 0 20.83e 
    10:04:05.827| 88.88 88.75 83.27 823.77 1 88.75

     

  • cillianreilly

    Member
    June 8, 2023 at 12:00 am

    The lambda isn’t necessary here:

     

    q)update m:price@'n from tab 
    time        | price n m 
    ------------| --------------------------------- 
    10:03:54.347| 20.83 21.44 26.83 29.83 0 20.83e 
    10:04:05.827| 88.88 88.75 83.27 823.77 1 88.75

     

    Not useful for the general case, but here you can forgo the explicit n column and use the virtual index column instead:

     

    q)tab:([time:10:03:54.347 10:04:05.827]price:(20.83 21.44 26.83 29.83e;88.88 88.75 83.27 823.77f)) 
    q)update m:price@'i from tab 
    time        | price m 
    ------------| ------------------------------- 
    10:03:54.347| 20.83 21.44 26.83 29.83 20.83e 
    10:04:05.827| 88.88 88.75 83.27 823.77 88.75

     

Log in to reply.