(q/kdb+;)生成自动列表

(q/kdb+;)生成自动列表,kdb,Kdb,示例1) 我有下面的代码 5#10+1*2 产生 index value 0 12 1 12 2 12 3 12 4 12 如何用索引替换数字“1” 然后生成 5#10+index*2 index value 0 10 1 12 2 14 3 16 4 18 更新示例2) 现在,如果我有,让我们说 mult:5; t:select from ([]numC:1

示例1)
我有下面的代码

5#10+1*2
产生

index   value
0       12
1       12
2       12
3       12
4       12
如何用索引替换数字“1” 然后生成

5#10+index*2

index   value
0       10
1       12
2       14
3       16
4       18
更新示例2)
现在,如果我有,让我们说

mult:5;
t:select from ([]numC:1 3 6 4 1;[]s:50 16 53 6 33);
update lst:(numC#'s) from t
最后一次更新将生成

 numC   s     lst
 1      50    50
 3      16    16 16 16
 6      53    53 53 53 53 53 53
 4      6     6 6 6 6
 1      33    33
如何生成下面的“lst”列

 numC   s     lst
 1      50    50+0*mult
 3      16    16+0*mult 16+1*mult 16+2*mult
 6      53    53+0*mult 53+1*mult 53+2*mult 53+3*mult 53+4*mult 53+5*mult
 4      6     6+0*mult 6+1*mult 6+2*mult 6+3*mult
 1      33    33+0*mult
我试过类似的东西

update lst:(numC#'s + (til numC)*mult) from t
但是我犯了个错误

ERROR: 'type

谢谢你,这就是你想要的吗

    q)x:5
    q)x#10+(til x)*2
    10 12 14 16 18

您可以删除take
#
并使用
til
简化为:

q)10+2*til 5
10 12 14 16 18
使用
til
将创建一个包含5个元素的列表(0->4),因此不需要从结果列表中获取5个元素。只有当您的索引列表大于5时,才需要Take

更新:

对于第二个示例,应使用以下方法:

q)update lst:{y+x*til z}'[mult;s;numC] from t
q)update lst:s+mult*til each numC from t
numC s  lst
-------------------------
1    50 ,50
3    16 16 21 26
6    53 53 58 63 68 73 78
4    6  6 11 16 21
1    33 ,33

我们可以通过多种方式实现这一目标:
1)
10+2*til 5

2)
(2*til 5)+10

/take运算符:并矢take函数创建列表。左参数指定计数和形状,右参数提供数据。 它对于从列表的前端或后端进行选择非常有用。

只有在需要时才使用
take
operator
#

假设我们有10个元素,其中输出需要5个元素,那么我们可以使用:
5#10+2*到10


/til函数接受一个非负整数参数X并返回前X个整数

谢谢你的回答,你介意再看一次这个问题吗?我补充了另一个疑问。更新了一个新的例子。
q)5#0 1 2 3 4 5 6 7 8      / take the first 5 items
0 1 2 3 4
q)-5#0 1 2 3 4 5 6 7 8     / take the last 5 elements
4 5 6 7 8