(q/kdb+) 生成自动列表
(q/kdb+) Generating an automated list
示例 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
谢谢 vm
这是您要找的吗:
q)x:5
q)x#10+(til x)*2
10 12 14 16 18
您可以删除 #
并使用 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 函数创建列表。左边的参数指定计数和形状,右边的参数提供数据。
它对于从列表的前端或末尾进行选择很有用。
https://code.kx.com/wiki/Reference/NumberSign
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
仅在需要时才使用 take
运算符 #
。
假设我们有 10 个元素,其中我们需要输出 5 个,那么我们可以使用:
5#10+2*直到 10
/ til 函数采用 non-negative 整数参数 X 和 returns 前 X 个整数
示例 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
谢谢 vm
这是您要找的吗:
q)x:5
q)x#10+(til x)*2
10 12 14 16 18
您可以删除 #
并使用 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 函数创建列表。左边的参数指定计数和形状,右边的参数提供数据。 它对于从列表的前端或末尾进行选择很有用。 https://code.kx.com/wiki/Reference/NumberSign
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
仅在需要时才使用 take
运算符 #
。
假设我们有 10 个元素,其中我们需要输出 5 个,那么我们可以使用:
5#10+2*直到 10
/ til 函数采用 non-negative 整数参数 X 和 returns 前 X 个整数